diff --git a/proj4/.gitignore b/proj4/.gitignore new file mode 100644 index 000000000000..ad74f2308ce9 --- /dev/null +++ b/proj4/.gitignore @@ -0,0 +1,89 @@ +*~ +Makefile +Makefile.in +CMakeFiles +CMakeCache.txt +CTestTestfile.cmake +cmake_install.cmake +install_manifest.txt +cmake/project-config*.cmake + +/*.manifest +/*.swp +/aclocal.m4 +/autom4te.cache +/config.cache +/config.guess +/config.log +/config.status +/config.sub +/configure +/compile +/depcomp +/install-sh +/libtool +/ltmain.sh +/missing +/nbproject +/proj.pc +/bin +/lib +/DartConfiguration.tcl +/Testing + +# html +/html/dl +/html/robots.txt + +# m4 +/m4/libtool.m4 +/m4/ltoptions.m4 +/m4/ltsugar.m4 +/m4/ltversion.m4 +/m4/lt~obsolete.m4 + +# nad +/nad/install +/nad/WI +/nad/prvi +/nad/WO +/nad/alaska +/nad/FL +/nad/README.NADUS +/nad/stpaul +/nad/stgeorge +/nad/TN +/nad/conus +/nad/MD +/nad/hawaii +/nad/stlrnc +/nad/null +/nad/*.lla + +# src +/src/*.o +/src/*.lo +/src/*.la +/src/proj.dll +/src/*.lib +/src/*.pdb +/src/*.exp +/src/*.opt +/src/*.obj +/src/*.exe +/src/.libs +/src/.deps +/src/*.manifest +/src/*.swp +/src/nad2nad +/src/nad2bin +/src/proj +/src/geod +/src/stamp-h* +/src/proj_config.h +/src/proj_config.h.in +/src/cs2cs +/src/multistresstest +/src/test228 + +/docs/build diff --git a/proj4/.travis.yml b/proj4/.travis.yml new file mode 100644 index 000000000000..a4378d9a0dfc --- /dev/null +++ b/proj4/.travis.yml @@ -0,0 +1,139 @@ +# This is the config file for building proj.4 and running its test suite +# with Travis-ci.org + +language: c + +services: + docker + +compiler: + - gcc +# - clang + +os: + - linux +# - osx + +matrix: + exclude: + - os: osx + compiler: gcc + +before_install: ./travis/before_install.sh + +install: +# prepare build files + - ./autogen.sh +# cmake build + - mkdir build_cmake + - cd build_cmake + - cmake .. -DCMAKE_INSTALL_PREFIX=/tmp/proj_cmake_install + - make -j3 + - make install + - find /tmp/proj_cmake_install + - cd .. +# autoconf build + - mkdir build_autoconf + - cd build_autoconf + - ../configure --prefix=/tmp/proj_autoconf_install + - make -j3 + - make install + - make dist-all + - find /tmp/proj_autoconf_install + - make check +# Check consistency of generated tarball + - TAR_FILENAME=`ls *.tar.gz` + - TAR_DIRECTORY=`basename $TAR_FILENAME .tar.gz` + - tar xvzf $TAR_FILENAME + - cd $TAR_DIRECTORY + - ./configure --prefix=/tmp/proj_autoconf_install_from_dist_all + - make -j3 + - make install + - make dist-all + - make check + - CURRENT_PWD=`pwd` + - cd /tmp/proj_autoconf_install + - find | sort > /tmp/list_proj_autoconf_install.txt + - cd /tmp/proj_autoconf_install_from_dist_all + - find | sort > /tmp/list_proj_autoconf_install_from_dist_all.txt + - cd $CURRENT_PWD +# The list of file is not identical. See http://lists.maptools.org/pipermail/proj/2015-September/007231.html +# - diff -u /tmp/list_proj_autoconf_install.txt /tmp/list_proj_autoconf_install_from_dist_all.txt + - cd .. +# + - cd .. +# Now with grids + - wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip + - cd nad + - unzip -o ../proj-datumgrid-1.5.zip + - cd .. +# cmake build with grids + - mkdir build_cmake_nad + - cd build_cmake_nad + - cmake .. -DCMAKE_INSTALL_PREFIX=/tmp/proj_cmake_install_nad + - make -j3 + - make install + - find /tmp/proj_cmake_install_nad + - cd .. +# autoconf build with grids + - mkdir build_autoconf_nad + - cd build_autoconf_nad + - ../configure --prefix=/tmp/proj_autoconf_install_nad + - make -j3 + - make install + - find /tmp/proj_autoconf_install_nad + - make check + - cd src + - make multistresstest + - make test228 + - cd .. + - PROJ_LIB=../nad src/multistresstest + - cd .. +# autoconf build with grids and coverage + - if [ $TRAVIS_OS_NAME == "osx" ]; then + CFLAGS="-DPJ_SELFTEST --coverage" ./configure; + else + CFLAGS="-DPJ_SELFTEST --coverage" LDFLAGS="-lgcov" ./configure; + fi + - make -j3 + - make check + - ./src/proj -VC + +# install & run the working GIGS test + # create locations that pyproj understands + - python3 --version + - ln -s src include + - ln -s src/.libs lib + - mkdir share + - ln -s nad share/proj + - pwd + # install pyproj + - PROJ_DIR=`pwd` pip3 install -v --user pyproj + + - cd test/gigs + # run test_json.py + - PROJ_LIB=../../nad python3 test_json.py --test conversion 5101.1-jhs.json 5101.4-jhs-etmerc.json 5105.2.json 5106.json 5108.json 5110.json 5111.1.json + - PROJ_LIB=../../nad python3 test_json.py 5101.2-jhs.json 5101.3-jhs.json 5102.1.json 5103.1.json 5103.2.json 5103.3.json 5107.json 5109.json 5112.json 5113.json 5201.json 5208.json + - cd ../.. + + - mv src/.libs/*.gc* src + +script: + - echo "done" + +after_success: +# coveralls falsely reports .c-files in the build directories as having 100% coverage so we exclude them + - coveralls --extension .c --exclude build_autoconf --exclude build_cmake + - echo "$TRAVIS_SECURE_ENV_VARS" + - sh -c "./travis/build_docs.sh" + - sh -c 'if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "master"; then echo "publish website"; ./travis/add_deploy_key.sh; ./travis/deploy_website.sh $TRAVIS_BUILD_DIR/docs/build /tmp; fi' + +notifications: + #email: + # recipients: + # - gdal-commits@lists.osgeo.org + + irc: + channels: + - "irc.freenode.org#gdal" + use_notice: true diff --git a/proj4/AUTHORS b/proj4/AUTHORS new file mode 100644 index 000000000000..ea121aa6ec6c --- /dev/null +++ b/proj4/AUTHORS @@ -0,0 +1,17 @@ +Original Author: +Gerald Evenden + +Maintainer(s): +Frank Warmerdam +Howard Butler + +Contributors: +Brent Fraser +Chris Stuber +Craig Bruce +Victor Osipkov +Andrea Antonello +Charles Karney +Karsten Engsager +Knud Poder + diff --git a/proj4/CMakeLists.txt b/proj4/CMakeLists.txt new file mode 100644 index 000000000000..cde21f0c57d0 --- /dev/null +++ b/proj4/CMakeLists.txt @@ -0,0 +1,120 @@ +################################################################################# +# +# This file is part of CMake configuration for PROJ4 library (inspired from SOCI +# CMake, Copyright (C) 2009-2010 Mateusz Loskot ) +# +# Copyright (C) 2011 Nicolas David +# Distributed under the MIT license +# +################################################################################# +# General settings +################################################################################# +cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) + +# proj4 is an ANSI C project +project(PROJ4 C) +set(PROJECT_INTERN_NAME PROJ) + +################################################################################# +# PROJ4 CMake modules +################################################################################# +# Path to additional CMake modules +set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH ${PROJ4_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) + +include(Proj4Utilities) + +message(STATUS "") +colormsg(_HIBLUE_ "Configuring PROJ:") + +################################################################################# +#PROJ version information +################################################################################# +include(Proj4Version) +proj_version(MAJOR 4 MINOR 9 PATCH 3) +set(PROJ_API_VERSION "12") +set(PROJ_BUILD_VERSION "12.0.0") + +################################################################################# +# Build features and variants +################################################################################# +include(Proj4SystemInfo) +include(Proj4Config) +include(Proj4Mac) +include(policies) + +################################################################################# +# Self-test build config +################################################################################# + +option(SELFTEST "Include self-test in build" OFF) +if(SELFTEST) + add_definitions(-DPJ_SELFTEST) +endif(SELFTEST) + +################################################################################# +# threading configuration +################################################################################# +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +find_package (Threads) + +include(CheckIncludeFiles) +include(CheckSymbolExists) +CHECK_SYMBOL_EXISTS(PTHREAD_MUTEX_RECURSIVE pthread.h HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) +if (HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN) + add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1) +endif() + +boost_report_value(PROJ_PLATFORM_NAME) +boost_report_value(PROJ_COMPILER_NAME) + +# Set a default build type for single-configuration cmake generators if +# no build type is set. +if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE Release) +endif () + +if (MSVC OR CMAKE_CONFIGURATION_TYPES) + # For multi-config systems and for Visual Studio, the debug version of + # the library has _d appended. + set (CMAKE_DEBUG_POSTFIX _d) +endif () + +option(PROJ4_TESTS "Enable build of collection of PROJ4 tests" ON) +boost_report_value(PROJ4_TESTS) +if(PROJ4_TESTS) + include(CTest) + enable_testing() +endif(PROJ4_TESTS) +include(Proj4Test) + +# Put the libaries and binaries that get built into directories at the +# top of the build tree rather than in hard-to-find leaf +# directories. This simplifies manual testing and the use of the build +# tree rather than installed Boost libraries. +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) +link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + +################################################################################# +# Installation +################################################################################# +include(Proj4InstallPath) +set(BINDIR "${DEFAULT_BINDIR}" CACHE PATH "The directory to install binaries into.") +set(LIBDIR "${DEFAULT_LIBDIR}" CACHE PATH "The directory to install libraries into.") +set(DATADIR "${DEFAULT_DATADIR}" CACHE PATH "The directory to install data files into.") +set(DOCDIR "${DEFAULT_DOCDIR}" CACHE PATH "The directory to install doc files into.") +set(INCLUDEDIR "${DEFAULT_INCLUDEDIR}" CACHE PATH "The directory to install includes into.") + +################################################################################# +# Build configured components +################################################################################# +include_directories(${PROJ4_SOURCE_DIR}/src) + +message(STATUS "") +add_subdirectory(nad) +add_subdirectory(src) +add_subdirectory(man) +add_subdirectory(cmake) + diff --git a/proj4/COPYING b/proj4/COPYING new file mode 100644 index 000000000000..fa3717487061 --- /dev/null +++ b/proj4/COPYING @@ -0,0 +1,34 @@ + +All source, data files and other contents of the PROJ.4 package are +available under the following terms. Note that the PROJ 4.3 and earlier +was "public domain" as is common with US government work, but apparently +this is not a well defined legal term in many countries. I am placing +everything under the following MIT style license because I believe it is +effectively the same as public domain, allowing anyone to use the code as +they wish, including making proprietary derivatives. + +Though I have put my own name as copyright holder, I don't mean to imply +I did the work. Essentially all work was done by Gerald Evenden. + + -------------- + + Copyright (c) 2000, 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. + diff --git a/proj4/ChangeLog b/proj4/ChangeLog new file mode 100644 index 000000000000..ece889c49277 --- /dev/null +++ b/proj4/ChangeLog @@ -0,0 +1,1968 @@ +2015-12-13: jswhit + * : Add inverse hammer transform (pull request #329). + +2015-09-10 sisyphus + * : Rename PVALUE in pj_param.cto prevent Windows variable name clash + +2015-09-10 Bas Couwenberg + * : Don't include files in proj dist, also included in proj-datumgrids + dist #301 + +2015-09-10 Ture Pålsson + * : PTHREAD_MUTEX_RECURSIVE detection issue on FreeBSD #303 + +2015-09-10 Martin Raspaud + * : Don't return values when doing inverse projections outside of the + mollweide map #304 + +2015-09-08 Charles Karney + * : Update Geodesic library from GeographicLib + * Improve accuracy of calculations by evaluating trigonometric + functions more carefully and replacing the series for the reduced + length with one with a smaller truncation error. + * The allowed ranges for longitudes and azimuths is now unlimited; it + used to be [-540d, 540d). + * Enforce the restriction of latitude to [-90d, 90d] by returning NaNs + if the latitude is outside this range. + * The inverse calculation sets s12 to zero for coincident points at + pole (instead of returning a tiny quantity). + * This commit also includes a work-around for an inaccurate value for + pi/180 in dmstor.c (see the definitions of DEG_IN and DEG_OUT in + geod_interface.c). + +2015-09-06 Even Rouault + * re-add proj_def.dat which was missing from source distribution + https://github.com/OSGeo/proj.4/issues/274 + https://github.com/OSGeo/proj.4/issues/296 and + https://github.com/OSGeo/proj.4/issues/297 + + +2015-07-27 Even Rouault + * : Remove setlocale() use in pj_init_ctx(), and replace uses of atof() & + strtod() by their locale safe variants pj_atof() and pj_strtod(). + Proj versions from now advertize #define PJ_LOCALE_SAFE 1 in proj_api.h + and export pj_atof() & pj_strtod() (#226) + +2015-06-01 Charles Karney + Make PJ_aeqd.c use geodesics for inverse and forward projection + modification so that the geodesic structure is not global + https://github.com/OSGeo/proj.4/pull/281 + +2015-05-25 Elliott Sales de Andrade + * : Fix inverse stereo projection on an ellipsoid + https://github.com/OSGeo/proj.4/pull/277 + +2015-02-21 Even Rouault + * nad/epsg: regenerate nad/epsg with GDAL r28536 to avoid + precision loss in TOWGS84 parameters, e.g. on Amersfoort / RD + EPSG:4289 (#260) + +2015-02-21 Howard Butler + * cmake/Proj4Version.cmake src\lib_proj.cmake: Align + SOVERSION CMake configuration with autotools #263 + +2015-02-21 Howard Butler + * src/lib_proj.cmake: define PROJ_LIB as part + of the compilation defines #261 + +2015-02-21 Even Rouault + * src/lib_proj.cmake nad/CMakeLists.txt: cmake build: install + nad.lst, geodesic.h. But not emess.h and pj_list.h (from Charles Karney) + +2015-02-21 Even Rouault + * src/pj_gridinfo.c: remove trailing / from preprocessor line + (from Charles Karney) + +2015-02-21 Even Rouault + * src/PJ_aitoff.c: define M_PI and M_PI_2 (needed for Windows) + (from Charles Karney) + +2015-02-21 Even Rouault + * src/lib_proj.cmake: remove space from variable name to + suppress policy warning. (from Charles Karney) + +2015-02-21 Even Rouault + * src/bin_nad2bin.cmake: backward test for nad2nad warning. + bad directory specified for emess (from Charles Karney) + +2015-02-21 Even Rouault + * man/man1/proj.1 man/man1/cs2cs.1 man/man1/geod.1 man/man3/pj_init.3: + fix various issues (#259) + +2015-02-21 Even Rouault + * nad/Makefile.am: compatibility with proj-datumgrids-1.6RC1 + (patch by sebastic, #249) + +2015-02-21 Even Rouault + * nad/Makefile.am: fix install target when no .lla files are in + nad subdirectory. + +2015-02-21 Even Rouault + * cmake/Makefile.am man/Makefile.am: install missing CMake support + files for dist-all target + +2015-02-20 Howard Butler + * CMakeLists.txt cmake/Proj4Mac.cmake + man/CMakeLists.txt src/bin_cs2cs.cmake + src/lib_proj.cmake: Adapt Charles Karney + CMake patches for smoother build #258 + +2015-02-20 Howard Butler + * config.guess config.sub: #257 update very old config.guess + and config.sub + +2015-02-17 Howard Butler + * src/PJ_aitoff.c: #250 Inverse solution for Winkel Tripel + from Drazan Tutic + +2015-02-17 Howard Butler + * CMakeLists.txt cmake/policies.cmake src/lib_proj.cmake: #256 + CMake tweaks to shut off some noisy policies, fix installation + of proj_config header, and shut off Framework building by + default on OSX + +2015-02-17 Howard Butler + * src/lib_proj.cmake CMakeLists: Fix #248 healpix compilation typo + +2015-02-16 Howard Butler + * src/pj_init.c: Fix #237 warning about initialization + ordering due to setlocale + +2015-02-16 Howard Butler + * nad/Makefile.am nad/Makefile.in and others in nad/: Fix #247 to + allow out-of-tree autoconf builds + +2014-09-17 Even Rouault + + * src/pj_datums.c, src/pj_ellps.c: Add clrk80ign ellipsoid and use it + in carthage datum def (#245) + +2014-09-16 Frank Warmerdam + + * Generate 4.9.0 RC2. + + * nad/epsg: updated with Pulkova 1942(58) reverted, and vertical + coordinate system names coming through properly. + + * src/pj_gridinfo.c, pj_apply_vgridshift.c, pj_apply_gridshift.c: + Fix problems with NTv2 files with improper parent structure (#177). + +2014-09-13 Frank Warmerdam + + * Generate 4.9.0 release. + +2014-19-13 Howard Butler + * CMake: Implement CMake build system for proj.4 #243 + +2014-09-13 Frank Warmerdam + + * src/pj_datums.c: fix spelling of clrk80 in carthage datum def (#245) + +2014-19-13 Howard Butler + * pj_gridinfo.c: Don't crash when nad_ctable_init doesn't return + a ctx. #231 + +2014-09-13 Frank Warmerdam + + * nad/epsg: Updated to EPSG 8.5 + +2014-19-08 Even Rouault + + * src/pj_gridinfo.c: Make pj_gridinfo_load() thread-safe (#228) + +2014-19-08 Howard Butler + + * src/pj_init.c: apply fix specified in #229 -- pj_init_plus() with init + and other parms fails in 4.9.0beta + +2014-06-06 Even Rouault + + * src/PJ_omerc.c: mark no_off/no_uoff as used for round-tripping + pj_init_ctxt()/pj_get_def() (#239) + +2014-05-14 Even Rouault + + * nad/epsg: Upgraded to EPSG 8.4 + +2013-12-09 Frank Warmerdam + + * src/PJ_geos.c, testvarious: reverse sense of sweep flag. (#146) + +2013-12-05 Frank Warmerdam + + * src/PJ_qsc.c: Add QSC projection (#179) + +2013-10-27 Frank Warmerdam + + * Prepare 4.9.0beta2 release. + +2013-10-21 Frank Warmerdam + + * src/PJ_omerc.c: Change handling of values nearly 90degrees away from + the origin (#114). + + * src/pj_datums.c: Switch to using EPSG:1618 COORD_OP_CODE to transform + hermannskogel to WGS84 (same as used to ETRS89) (#207). + +2013-10-20 Frank Warmerdam + + * src/Makefile.am: Given up on restricting access to projects.h, and + move it back into the list of files installed normally. + + * configure.in: Add C_WFLAGS support, in particular use + -Wdeclaration-after-statement to warn about code that won't work + with MSVC (#224). + + * src/cs2cs.c: Support -I when there is no +to projection. + + * src/PJ_ob_tran.c: Propogate ctx into sub-projection (#225). + +2013-10-03 Frank Warmerdam + + * src/PJ_healpix.c: Fix healpix build on msvc. (#223) + +2013-10-01 Frank Warmerdam + + * nad/epsg: Upgraded to EPSG 8.2. + +2013-07-21 Frank Warmerdam + + * src/proj_etmerc.c: Fix two errors in the n**5 coefficients. Add + sixth order coefficients. Fix rounding problems (#222) + +2013-07-19 Frank Warmerdam + + * src/PJ_healpix.c: major update for polar scaling and parms (#219) + +2013-07-12 Frank Warmerdam + + * src/geodesic.{c,h}: allow polygon vertices to be specified + incrementally for geodesic area (#221). + +2013-07-08 Frank Warmerdam + + * src/PJ_calcofi.c: Add Cal Coop Ocean Fish Invest Lines/Stations + projections (calcofi) (#135) + +2013-07-02 Frank Warmerdam + + * nad/testvarious, nad/tv_out.dist: add new robinson forward test, + and backwards tests. + + * src/PJ_robin.c: Applied new coefficients supplied by Ed Campbell + pretty much on faith. (#113) + +2013-06-26 Frank Warmerdam + + * src/pj_open_lib.c: change filename and access args to const. + +2013-06-25 Frank Warmerdam + + * nad/Makefile.am: add CH to pkgdata_DATA (#145). + + * src/PJ_putp3.c: Fix putp3p usage line to remove "no inv" (#167). + + * src/PJ_aitoff.c: note that aitoff and wintri projections have no + inverse (#160, #168). + + * src/PJ_urm5.c: Note that there is no inverse, fix spelling of alpha + in the short description (#169). + + * src/pj_ell_set.c: Ensure thread context is forwarded. + + * src/multistresstest.c: add windows support (#199) + + * src/pj_ctx.c: avoid race condition on setting of + default_context_initialized. (#199) + + * config.guess, config.sub: updated to newer versions (#208). + + * src/proj.def: add pj_get_spheroid_defn to proj.def. (#214) + + * install-sh: upgrade to support multiple files (#217) + +2013-06-24 Frank Warmerdam + + * src/projects.h, src/proj_api.h: move pj_open_lib() into proj_api.h. + + * src/projects.h: Do not define PROJ_LIB to "PROJ_LIB". + +2013-06-22 Frank Warmerdam + + * Preparing for 4.9.0 beta release. + + * src/geodesic.{c,h}: sync relative to GeographicLib 1.31. (#216) + + * src/pj_fileapi.c, etc: Implement a virtual file api accessable + through the context for init file and grid shift file access. + + * src/mk_cheby.c: reformat, add braces to avoid warnings. + +2013-06-19 Frank Warmerdam + + * src/PJ_healpix.c: correct various warnings about unused variables. + +2013-06-19 Frank Warmerdam + + * src/pj_mutex.c, configure.in: Ensure that the core mutex lock + is created in recursive mode. Results in -lpthread being required. + +2013-06-18 Frank Warmerdam + + * src/PJ_healpix.c: rename sign() to pj_sign() and make it static. No + need to risk conflicting with sign() in other packages like gctpc. + +2012-12-17 Frank Warmerdam + + * src/pj_init.c: Recover gracefully if setlocale() returns NULL + like on Android (#204). + +2012-12-07 Frank Warmerdam + + * src/geod*: Replace geodesic implementation with one from + Charles Karney, add public interface (#197). + +2012-12-05 Frank Warmerdam + + * nad/epsg: Upgraded to EPSG 8.0. + +2012-07-24 Frank Warmerdam + + * src/pj_gridcatalog.c, src/makefile.vc: fixes for visual studio + builds (#182). + +2012-07-04 Frank Warmerdam + + * src/PJ_healpix.c: Incorporate a polar fix (#176). + +2012-06-27 Frank Warmerdam + + * src/nad2bin.c: Fix byte swapping for bigendian platforms (#157) + +2012-06-07 Frank Warmerdam + + * src/pj_init.c: avoid leaking vgridlist_geoid (#175). + +2012-06-01 Martin Desruisseaux + + * Removed the old JNI wrappers from trunk. Those wrappers are + still present on the 4.8 branch as deprecated classes. + +2012-05-31 Martin Desruisseaux + + * Replaced usages of NAN C/C++ constant by the java.lang.Double.NaN + constant. This was done because not all C/C++ compilers define the + NAN constant, and for making sure that the bits pattern is exactly the + one expected by Java. + +2012-03-25 Frank Warmerdam + + * src/Makefile.am: Add org_proj4_PJ.h to files to distribute. + +2012-03-13 Frank Warmerdam + + * src/projects.h, src/pj_list.c: avoid using #include directly on a + macro expansion - it is unnecessary and makes for problems in my work + environment. + +2012-03-06 Frank Warmerdam + + * Preparing 4.8.0 release candidate. + + * nad/epsg: regenerate with +no_uoff for hotine oblique mercator (#104) + + * src/PJ_sconics.c: Fix missing P->sig term in pconic forward + projection equation (#148). + +2012-03-03 Frank Warmerdam + + * src/PJ_omerc.c: Support +no_uoff and +no_off (#128) + + * src/PJ_stere.c: Cleanup odd code construct (#147) + +2012-02-26 Frank Warmerdam + + * src/PJ_geos.c, nad/testvarious: Added GEOS +sweep and add GEOS + to the test suite (#146) + + * nad/CH: added swiss datum related definitions from strk (#145) + + * src/Makefile.am, src/mutltistresstest.c: provide for building + multistresstest in the makefile, and slightly improve it. + +2012-02-25 Frank Warmerdam + + * nad/epsg: regenerate with +datum (#122) + +2012-02-20 Frank Warmerdam + + * Prepare 4.8.0 Beta1. + + * src/PJ_isea.c: Add Icosahedral Snyder Equal Area projection (#111) + + * src/nad2nad.c: completely removed as part of the ctable2 overhaul. + + * src/cs2cs.c, src/pj_init.c, src/geod_set.c, src/nad2nad.c, src/geod.c: + Use parenthesis around assignments in if statements (#123). + + * src/nad2bin.c: improve io error checking (#140). + + * src/PJ_healpix.c: fix windows build issues (#133) + +2012-02-15 Frank Warmerdam + + * src/pj_utils.c: Add pj_get_spheroid_defn() (#142) + +2012-02-08 Frank Warmerdam + + * src/pj_apply_gridshift.c: Ensure that one amoung many points + falling outside the grid areas will not cause the remainder to not + be datum shifted in a way that is hard to diagnose. (#45) + +2012-02-01 Frank Warmerdam + + * src/pj_apply_gridshift.c: ensure we try to use grids as long as we + are within epsilon of the edge (#141). + +2012-01-31 Frank Warmerdam + + * src/nad2bin.c: fix comparison test for -f flag (#139). + +2011-12-22 Frank Warmerdam + + * src/pj_init.c; Only split arguments on pluses following spaces + in pj_init_plus() (#132) + +2011-12-14 Frank Warmerdam + + * src/pj_open_lib.c: make sure we check errno before logging messages (#131). + +2011-12-13 Frank Warmerdam + + * src/PJ_healpix.c, etc: added healpix support contributed by + Landcare in New Zealand. + +2011-11-22 Frank Warmerdam + + * src/nad_init.c, src/pj_gridinfo.c, src/nad2bin.c: Implement + support for "ctable2" format grid shift files. + +2011-11-18 Frank Warmerdam + + * src/pj_mutex.c, src/pj_apply_vgridshift.c: avoid unused warnings. + +2011-11-13 Frank Warmerdam + + * src/nad2bin.c: Modified to write NTv2 format files. + + * src/pj_init.c: avoid casting warning with old_locale. + +2011-09-28 Frank Warmerdam + + * nad/epsg: Upgrade to EPSG 7.9. Ideal datum selection rules also + changed a bit upstream. + +2011-09-01 Martin Desruisseaux + + * Updated jniwrap/build.xml Ant script and README file. + +2011-08-27 Martin Desruisseaux + + * Fixed some (but not all) memory leaks in org.proj4.Projections JNI bindings + + * Deprecated org.proj4.Projections JNI bindings + + * Added org.proj4.PJ JNI bindings in replacement of org.proj4.Projections + +2011-08-27 Frank Warmerdam + + * pj_pr_list.c, pj_sterrno.c: doc typo fixes from Martin. + +2011-08-07 Frank Warmerdam + + * src/pj_datums.c: Updated Potsdam (DHDN) towgs84 parameters to match + EPSG 7 parameter list for EPSG:4314 (#115). + + * src/pj_mutex.c: alter name of core_lock to avoid conflict on AIX (#55) + +2011-07-23 + + * configure.in, Makefile.am, proj.pc.in: Added pkg-config support (#3) + +2011-07-05 Frank Warmerdam + + * src/pj_init.c, src/pj_gridinfo.c: Correct error handling for missing + grid shift files and defaults files (#116) + +2011-06-09 Frank Warmerdam + + * src/PJ_robin.c: fix mistaken constant value (#113). + + * src/pj_init.c: fix for +axis validation (#87) + + * nad/IGNF: addition/fix of Kerguelen, Amsterdam and St Paul, Terre Adélie, + INSPIRE CRSes in IGNF catalogue (#88) + +2011-05-31 Frank Warmerdam + + * src/PJ_igh.c: use project free instead of free() in FREEUP (#112). + + * src/projects.h: memset PJ structure to zeros after allocation to + avoid problems getting everything initialized properly (#112). + +2011-05-23 Frank Warmerdam + + * nad/esri.extra, nad/other.extra: moved 900913 definition from + esri.extra to other.extra since it has nothing to do with esri. + + * nad/epsg: updated to EPSG 7.6. + +2011-05-20 Frank Warmerdam + + * src/PJ_sterea.c: ensure P->en is properly initialized (#109) + +2011-05-10 Frank Warmerdam + + * src/projects.h, src/pj_init.c, src/pj_transform.c: Implement + support for vto_meter and vunits vertical units transformation. + +2011-05-04 Frank Warmerdam + + * src/PJ_igh.c: Added goodes interrupted homolosine (#106). + +2011-03-28 Frank Warmerdam + + * src/pj_gridlist.c: avoid possible buffer overflow. + https://bugs.meego.com/show_bug.cgi?id=14963 + +2011-03-23 Frank Warmerdam + + * src/pj_initcache.c: Fix reversed memcpy that causes a crash on the + 16th item put in the initcache. (#100). + +2011-02-21 Frank Warmerdam + + * src/pj_init.c: fix serious bug in locale handling, wasn't copying + the old locale so it would sometimes get corrupted. + + * src/proj_etmerc.c: added extended transverse mercator impl. (#97) + + * Rerun autogen.sh with the latest versions of automake, autoconf and + libtool. + +2011-02-10 Frank Warmerdam + + * src/pj_gridinfo.c: fix debug bounds reported (#95). + +2011-02-08 Frank Warmerdam + + * src/PJ_cea.c: Fix particular CEA case (#94). + + * src/pj_auth.c: correct precision of constants (#93) + + * src/pj_init.c, pj_malloc.c, jniproj.c: avoid C++ comments (#92) + +2011-01-11 Frank Warmerdam + + * src/PJ_goode.c: fix propogation of es and ctx to sub-projections. + +2010-10-19 Frank Warmerdam + + * src/proj_api.h, src/projects.h: move pj_clear_initcache() to public + api and update to 4.8.0 PJ_VERSION to identify when this is available. + +2010-08-31 Frank Warmerdam + + * src/pj_gridinfo.c: Move grids in 180 to 360 region to -180 to 0. + Improve error/debug reporting. + +2010-08-21 Frank Warmerdam + + * nad/test*: default to using ../src/cs2cs + +2010-07-31 Frank Warmerdam + + * nad/epsg: updated from GDAL. Adds TMSO projection definitions, + and replaces all named datums with fully defined datums. + +2010-07-05 Frank Warmerdam + + * src/projects.h: I_ERROR macro must set context errno. + +2010-06-10 Frank Warmerdam + + * src/*: Preliminary implementation of projCtx multithreading change. + +2010-05-11 Frank Warmerdam + + * src/pj_apply_vgridshift.c (+more): preliminary addition of + vertical grid shifting support. + +2010-03-16 Frank Warmerdam + + * src/pj_transform.c, src/pj_init.c, src/projects.h, src/pj_gridlist.c, + src/pj_apply_gridshit.c: rework the translation of nadgrids parameters + into a list of gridshift files to avoid use of static "lastnadgrids" + information which screws up multithreading. Changes the PJ structure. + + * src/multistresstest.c: new harnass for multithreaded testing. + +2010-03-03 Frank Warmerdam + + * src/*: fix a variety of warnings when -Wall is used. Mostly + unused variables, and use of assignment results in an if statement + without extra brackets. + + * src/*: treat most grid shift errors as not-transient, with the + exception of not having a grid shift file for the area of interest. + This is done by adding a new error code for no grid shift file for + target area. Also ensure that cs2cs reports pj_transform() errors + via emess so we have a chance of seeing the error message. + +2010-02-28 Frank Warmerdam + + * src/pj_init.c, src/pj_transform.c: added support for +axis setting + to control axis orientation (#18). + + * nad/epsg: Regenerated from EPSG 7.4.1 with the big datum selection + upgrade. + +2010-02-20 Frank Warmerdam + + * src/PJ_omerc.c: wholesale update from libproj4.3 (20081120) (#62) + +2010-01-25 Frank Warmerdam + + * src/pj_mutex.c: avoid conflict between pthread and win32 mutex + implementations on unix-like build environments on windows. (#56) + + * src/pj_init,src/projects.h,src/pj_transform.c,nad/testvarious: + Correct seriously broken +lon_wrap implementation. (#62) + + * src/pj_mutex.c: fix creation of mutex on win32 to be in + unacquired state in pj_init_lock to avoid an extra reference. (#63) + +2009-10-19 Frank Warmerdam + + * nad/ntf_r93.gsb: updated with file from IGN (#52). + + * docs/*: files moved out of source tree (still in svn) + +2009-09-29 Frank Warmerdam + + * nmake.opt: Update so that various items can be externally + overridden (#54). + +2009-09-24 Frank Warmerdam + + * nad/Makefile.am: add ntv2 and ignf testing if grid shift files + are available. + +2009-09-23 Frank Warmerdam + + * Preparing for 4.7.0 release. + + * nad/makefile.vc: do not attempt to install ntf_r93.gsb by default. + + * src/pj_init.c: Temporarily set locale to "C" to avoid locale + specific number parsing (#49). + + * src/pj_rho.c: move rho out of structure, threadsafety issue (#41). + + * nmake.opt: improve comments (#50). + + * nad/epsg: regenerated - use more symbolic ellipsoid/datum names, and + fix EPSG 3857 and 3785 (#51). + + * src/pj_gridlist.c: Implement mutex protection for grid loader/cacher. + + * src/pj_mutex.c: fix up windows support. + + * nad/ntf_r93.gsb: set mime-type to binary so it isn't corrupted on + windows systems. + +2009-06-17 Frank Warmerdam + + * src/pj_mutex.c: Implement win32 and pthread mutex support. + + * configure, src/Makefile.am: add --without-mutex support to configure + +2009-06-16 Frank Warmerdam + + * README: Update windows build instructions (#30). + + * nad/epsg: Upgraded to EPSG 7.1. + +2009-05-19 Frank Warmerdam + + * nad/testvarious,nad/testdatumfile: split datum file specific + stuff into testdatumfile, and add kav5 test in testvarious (#40). + +2009-05-18 Frank Warmerdam + + * src/PJ_sts.c: Remove duplicate division o lp.phi by P->C_p (#40). + +2009-05-13 Frank Warmerdam + + * src/PJ_imw_p.c: Correct handling of yc in loc_for() (#39). + +2009-04-02 Frank Warmerdam + + * nad/Makefile.am: Changes to ensure grid shift files are processed + before running check-local, and to use the local grid shift files + if available, and to avoid testvarious if grid shift files are + not available. + + * src: Fix various warnings. + +2009-03-11 Frank Warmerdam + + * man/man1: fix Snyder reference (#29) + +2009-03-10 Howard Butler + * autogen.sh: Use autogen.sh from libLAS for wider + platform (OSX, Solaris) compatibility + * config.guess config.log: remove autoconf temporary + files + +2009-03-10 Mateusz Loskot + + * makefile.vc: Added new files pj_mutex.c, pj_initcache.c. + +2009-03-09 Frank Warmerdam + + * pj_init.c, pj_mutex.c, pj_initcache.c: Introduced in-memory caching + of init file search results. + +2009-03-08 IGNF + + * src/PJ_gstmerc.c: Correction of a bug in inv() function : + the projected origin coordinates where descaled. + + * nad/testIGNF: Add a comment on the mandatory existance of the world grid + in order to make the test. + + * ChangeLog: this comments + +2009-01-26 Frank Warmerdam + + * src/*.c: Remove SCCSID and lint stuff from all source files. + +2009-01-23 Frank Warmerdam + + * src/biveval.c: Avoid use of static variables which interfere with + re-entrancy (#24)" + +2009-01-05 Frank Warmerdam + + * src: Removed CVS log messages from various files since they are + not maintained by subversion. + +2008-09-16 Frank Warmerdam + + * src/{Makefile.am, Makefile.in}: Added '-no-undefined' option to + LDFLAGS. This is required to properly build a library in some + environments, MinGW in particular. + +2008-08-21 Frank Warmerdam + + * Prepare 4.6.1RC2 + + * nad/td_out.dist: backed out erroneous changes in 4.6.0 that lost + datum shifts with grid shift files. Added stere (#12) test. + + * nmake.opt: Added /Op to avoid stere errors per ticket #12. + +2008-08-07 Frank Warmerdam + + * nmake.opt, nad/makefile.vc: Make sure we use PROJ_LIB_DIR when + installing nad directory support files on windows. + +2008-07-28 IGNF + + * PJ_glabsgm.c : refactoring for better understanding of the projection's + formula. + * copy of PJ_glabsgm.c to PJ_gstmerc.c and make changes accordingly in src + and nad directories. + +2008-07-21 Frank Warmerdam + + * Prepare 4.6.1 release. + + * rename INSTALL.TXT to INSTALL since the damn distribution generator + won't stand for the alternate naming. Change makefile.vc to use + install-all target instead of install. What are the chances anyone + will think of trying that? Not high. + + * nad/epsg: regenerated from EPSG 6.17. This should also correct the + odd precision problems in the last version or two caused by GDAL + numeric processing issues. + +2008-06-17 Frank Warmerdam + + * src/PJ_tmerc.c: Ensure that tmerc forward projection inputs are + within 90 degrees of the central meridian. This should be considered + a preliminary patch until such time as Gerald comes up with a better + solution. http://trac.osgeo.org/proj/ticket/5 + +2008-04-24 Frank Warmerdam + + * src/cs2cs.c: Fix process() so it passes through extra text as the + docs claim. + +2008-03-15 Frank Warmerdam + + * rename INSTALL to INSTALL.TXT to avoid screwing up "make install" + * Rework win32 makefiles to support "make install", and better + knowledge of grid shift files, + +2008-01-18 IGNF + + * PJ_eqc.c : Merged eqr and eqc after advise from Gerald. eqc is + now generalized (supports latitude of origin). Cleaned files + including eqr. + * IGNF catalogue : changed accordingly. Added proj_outIGN.dist-real + in nad directory to get real coordinates for unit tests. + +2008-01-05 IGNF + + * PJ_eqr.c: src/PJ_eqr.c added. src/pj_list.h modified (added eqr). + src/Makefile.am, src/makefile.vc modified (added PJ_eqr.c and al). + As automake 1.10 is missing, src/Makefile.in modified by hand. + * PJ_glabsgm.c: src/PJ_glabsgm.c added. src/pj_list.h modified (added glabsgm). + src/Makefile.am, src/makefile.vc modified (added PJ_glabgsm.c and al). + As automake 1.10 is missing, src/Makefile.in modified by hand. + * IGNF catalogue: nad/IGNF added. nad/ntf_r93.gsb added, nad/Makefile.am + modified (added IGNF, ntf_r93.gsb little endian release) + nad/README modified (added IGNF, ntf_r93.gsb). + As automake 1.10 is missing, nad/Makefile.in modified by hand. + * Specific IGN release : configure.in + ChangeLog + +2007-12-21 Frank Warmerdam + + * Prepare 4.6.0 final release. + +2007-12-21 Andrey Kiselv + + * PJ_wag3.c: Added missed "lat_ts" parameter to projection description + string. + +2007-12-20 Frank Warmerdam + + * pj_list.h, Makefile.am, PJ_mpoly.c: Removed mpoly projection. It + was just a dummy (no actual transformation). + +2007-12-06 Frank Warmerdam + + * pj_factors.c: in the case of phi=90, the derived should be calculated + at [90-delta,90] instead of at [90,90+delta] (the same is true for -90) + http://bugzilla.remotesensing.org/show_bug.cgi?id=1605 + +2007-12-03 Frank Warmerdam + + * pj_transform.c: Small improvement in WGS84_ES precision to avoid + an unnecessary trip through geocentric space (eg bug 1531). + +2007-11-30 Frank Warmerdam + + * add latlon and lonlat as aliases. + +2007-11-29 Frank Warmerdam + + * Prepare 4.6.0beta1 release. + + * nad/epsg: Upgrade to EPSG 6.13 + +2007-11-25 Frank Warmerdam + + * pj_transform.c: Do ellipsoid comparisons using the _orig ellipse + values rather than the adjusted one. Use these original values for + any conversion to/from geocentric coordinates. + + Also, only do pj_datum_transform if neither the source nor destination + is PJD_UNKNOWN. This means we will no longer attempt via-geocentric + adjustments for coordinate systems lacking a datum definition (having + only an ellipsoid. + + * projects.h, pj_init.c: added a_orig and es_orig values in the PJ + structure so we can distinguish between the originally requested + ellipsoid, and the ellipsoid after adjustment for spherical projections + + Todays changes courtesy of bug 1602. + +2007-09-28 Frank Warmerdam + + * nad/esri.extra: Add "900913" code for google mercator. + +2007-09-11 Frank Warmerdam + + * src/gencent.c/h, src/pj_transform.c: Restructure so geocentric code + does not use static variables - reentrancy fix. + + * src/nad_init.c: Improve error recovery if ctable datum shift files + fails to load. + +2007-08-20 Frank Warmerdam + + * src/proj_api.h: include void in arg list for prototypes with no + arguments to avoid warning about not being a function declaration. + +2007-07-06 Frank Warmerdam + + * src/pj_open_lib.c: Per suggestion from Janne, ensure + pj_set_searchpath(0,NULL) clears the search path cleanly. + +2007-06-04 Frank Warmerdam + + * src/proj.c: pj_free() the definition to simplify leak testing. + +2007-04-04 Frank Warmerdam + + * src/PJ_laea.c: Fix memory leak of apa field. + +2007-04-03 Frank Warmerdam + + * src/PJ_gn_sinu.c: remove duplicate call to pj_enfn() (bug #1536) + +2007-03-12 Frank Warmerdam + + * src/pj_utils.c: Removed duplicate appending of towgs84 parameter. + +2007-03-11 Frank Warmerdam + + * src/projects.h: Ensure that WIN32 is defined on win32 systems. + + * src/pj_open_lib.c: support drive letter prefixes on absolute + paths. Support either \ or / as a dir delimeter on windows (bug 1499) + +2007-03-07 Frank Warmerdam + + * src/PJ_krovak.c: info string change to report ellipsoidal instead + of spherical per email from Markus. + +2007-01-31 Frank Warmerdam + + * src/pj_datum_set.cpp: Don't parse more datum shift parameters than + we have space to store in datum_params[]. + +2006-11-02 Frank Warmerdam + + * src/rtodms.c: Fix computation of degree per bug described on the + mailing list. + +2006-10-22 Frank Warmerdam + + * Prepare for 4.5.0 final release. + +2006-10-18 Frank Warmerdam + + * nad/epsg: added polish zones (2172-2175) manually per request from + Maciek on the mailing list. + + * Preparing 4.5.0 beta4 release. + +2006-10-17 Frank Warmerdam + + * src/proj_mdist.c, proj_rouss.c: Incorporated these from libproj4 + for http://bugzilla.remotesensing.org/show_bug.cgi?id=967. + + * nad/epsg: Regenerated from EPSG 6.11.1 with a few other + fixes (datum shift values) from several bug reports. + +2006-10-12 Frank Warmerdam + + * Added experimental +lon_wrap argument to set a "center point" for + longitude wrapping of longitude values coming out of pj_transform(). + +2006-10-10 Frank Warmerdam + + * src/proj.c,nad2nad.c,cs2cs.c: Increase MAX_LINE to 1000 per + request from Dan Scheirer. + +2006-10-01 Frank Warmerdam + + * nad/Makefile.am: added test target. + +2006-09-23 Frank Warmerdam + + * nad/epsg: upgraded to EPSG 6.11 + +2006-09-22 Frank Warmerdam + + * src/pj_init.c: removed static "start" variable to resolve + thread-safety problems (bug 1283). + +2006-09-14 Frank Warmerdam + + * Produce 4.5.0beta2 release. + + * src/PJ_krovak.c: Add +czech flag to apply non-useful sign reversal + that someone once apparently thought was a good idea. By default work + like folks want. Contributed by Martin Landa and Radim Blazek. + Bug 1133, and 147. + +2006-07-07 Frank Warmerdam + + * Added esri.extra and other.extra to distributed and installed files + in nad/Makefile.am. + + * autotools update. + +2006-06-23 Andrey Kiselev + + * src/PJ_eqdc.c: Do not call pj_enfn() twice avoiding memory leak. + +2006-05-01 Frank Warmerdam + + * src/pj_transform.c: Ensure that out-of-range lat/long values in + geodetic_to_geocentric are considered transient errors. + +Rel. 4.5.0 2006-04-21 +------------------------------------------------------------------------- + +2006-04-21 Frank Warmerdam + + * nad/epsg: Upgraded using GDAL 1.3.2 with prime meridian fixes, + and reporting of deprecated PCSes. + +2006-04-20 Frank Warmerdam + + * Fixed direction of Bogota meridian (west not east). + +2006-04-19 Frank Warmerdam + + * Preparing 4.5.0 release. + +2006-03-30 Frank Warmerdam + + * projects.h, cs2cs.c, pj_strerrno.c, p_series.c, gen_cheb.c: Added + _CRT_SECURE_NO_DEPRECATE declaration for VC8+, and ensure projects.h + gets included first where needed. Avoids loud warnings on VC8. + http://bugzilla.remotesensing.org/show_bug.cgi?id=1145 + +2006-03-29 Frank Warmerdam + + * pj_krovak.c: Removed MessageBox() DEBUG stuff. + +2006-03-20 Frank Warmerdam + + * src/pj_transform.c: Return error -14 (latitude or longitude + exceeds bounds) for failed geodetic to geocentric (lat out of +-90). + +2006-03-10 Frank Warmerdam + + * nad/epsg: updated to EPSG 6.9. + +2006-02-16 Frank Warmerdam + + * src/pj_transform.c: Treat errno=33 (EDOM) and errno=34 (ERANGE) + as transient errors, and continue trying to transform the rest of + the points. + +2006-01-19 Frank Warmerdam + + * nad/world: Fixed definition of as per: + http://bugzilla.remotesensing.org/show_bug.cgi?id=1041 + +2006-01-12 Frank Warmerdam + + * geocent.c: Make global variables static. Amoung other things + this avoids conflicts for apps that link in geotrans. + +2005-12-04 Frank Warmerdam + + * src/pj_transform.c: improve code with some symbolic names. + +2005-11-08 Frank Warmerdam + + * src/pj_datums.c: Added OSGB36 transformation to list. + +2005-07-06 Frank Warmerdam + + * nad/Makefile.am: added .gsb installation logic to capture nz file. + + * pj_gridinfo.c: fixed debug format string per: + http://bugzilla.remotesensing.org/show_bug.cgi?id=886 + + * pj_utils.c: fixed precision of es encoding in pj_latlong_from_proj. + http://bugzilla.remotesensing.org/show_bug.cgi?id=881 + +2005-04-20 Frank Warmerdam + + * pj_apply_gridshift.c: Fixed problem that was resulted in points + after the first apparently succeeding to shift when a gridshift + file wasn't found. Bug 834. + +2004-11-05 Frank Warmerdam + + * src/pj_transform.c: Fixed pj_geocentric_to_geodetic() to not try + and process HUGE_VAL values (those that have failed some previous + transform step). Related to bug: + http://bugzilla.remotesensing.org/show_bug.cgi?id=642 + +2004-10-30 Frank Warmerdam + + * Improved --with-jni support in configure to allow specification + of an include directory. + +Rel. 4.4.9 2004-10-29 +------------------------------------------------------------------------- + +2004-10-29 Frank Warmerdam + + * Preparing 4.4.9 release. + + * src/pj_gridinfo.c: Fixed reported information in ctable debug msg. + + * src/nad_cvt.c: Fixed problem with domai of tb.lam that caused + failure of eastern hemisphere locations to transform with null + grid (which is world sized). + +2004-10-28 Frank Warmerdam + + * src/makefile.vc: Changed to build executables against a proj.dll + by default. + + * proj.def: added lots of methods, including some private ones used + only by proj.c, and geod.c. + + * Added pj_get_*_ref() accessors for all the definition lists. + + * Makefile.am: added jniwrap make support. + + * configure.in: various updates, including use of AC_MAINTAINER_MODE, + and setting version to 4.4.9. Fixes annoying .so problem. + + * updated to latest libtoolish stuff. + +2004-10-25 Frank Warmerdam + + * fixtimes.sh: Run this after a CVS checkout to setup times of + various build files to avoid re-running automake and friends. + + * src/geocent.c,geocent.h,pj_transform.c: Added pj_ prefix to + all Geotrans functions to avoid name conflict if both linked in. + + * configure.in: added --with-jni option. + + * Added src/jniproj.c, src/org_proj4_Projections.h. + + * Added jniwrap subtree (actually Andrea Antonello). + +2004-10-21 Frank Warmerdam + + * src/makefile.vc: added support for new files. + +2004-10-19 Frank Warmerdam + + * src/pj_gauss.c, src/PJ_geos.c, src/PJ_sterea.c: Incorporated + geos and sterea projections from Gerald's libproj4. + +2004-09-16 Frank Warmerdam + + * src/pj_open_lib.c: added pj_set_searchpath() provided by Eric Miller. + +2004-09-14 Frank Warmerdam + + * src/pj_pr_list.c: Ensure unused parameters are not included + in the returned string (provided by Eric Miller). + +2004-05-17 Frank Warmerdam + + * proj.spec: Change PACKAGE_NAME from "PROJ" to "proj". + +2004-05-12 Frank Warmerdam + + * nad/epsg: update translation for potsdam datum. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=566 + +2004-05-04 Frank Warmerdam + + * src/pj_init.c: Made sword[] larger in get_opt() so long +towgs84 + parameters or long +nadgrids parameters aren't truncated. + +Rel. 4.4.8 2004-05-04 +------------------------------------------------------------------------- + +2004-05-04 Frank Warmerdam + + * 4.4.8 release re-issued. + + * nad/epsg: regenerated with prime meridian problems corrected. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=510 + +2004-05-03 Frank Warmerdam + + * Preparing 4.4.8 release. + + * src/pj_datums.c: added nzgd49 datum definition + + http://bugzilla.remotesensing.org/show_bug.cgi?id=339 + + * nad/epsg: updated to EPSG 6.5. + + * src/pj_transform.c: fixed so that raw ellipsoids are handled + in datum shifting as if they had a +towgs84=0,0,0. + + * src/pj_transform.c: Fixed so that prime meridian offsets are + applied even if the coordinate system is not lat/long. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=510 + + * src/geocent.c: Updated Geocentric_To_Geodetic computation to be + iterative to reduce error as per Wenzel, H.-G.(1985): Hochauflösende + Kugelfunktionsmodelle für das Gravitationspotential der Erde. Wiss. + Arb. Univ. Hannover Nr. 137, p. 130-131. Fix adapted to geocent.c and + submitted by Lothar Gorling. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=563 + +2004-04-15 Frank Warmerdam + + * src/makefile.vc: Define HAVE_STRERROR. + + * src/projects.h: PJD_ERR_GEOCENTRIC now -45, and added to + pj_strerrno.c. + + * src/pj_release.c: added pj_get_release() function. + +2004-02-19 Frank Warmerdam + + * nad/other.extra: updated from some WKT definition Daniel got from + CubeWerx. + +2004-01-24 Frank Warmerdam + + * src/pj_transform.c: Ensure pj_transform() will try to transform all + points in provided list if even some might transform properly. + +2003-08-18 Frank Warmerdam + + * src/PJ_aea.c: fixed initialization of en variable. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=380 + +2003-06-27 Frank Warmerdam + + * src/pj_init.c: changed tokenizing in pj_init_plus() so that if + a value has an exponent with a plus sign this won't trigger a brand + new token. See bug 355 in bugzilla. + +2003-06-09 Frank Warmerdam + + * src/pj_init.c: ensure start is initialized at the very beginning + of the function to avoid crashes in case where the input arg list + is empty. + +2003-04-24 Frank Warmerdam + + * src/geod.c: Don't emit an error message after listing ellipsoids + or units, as per request from Dan Jacobson. + +2003-04-09 Frank Warmerdam + + * man/man1/{proj,cs2cs}.1: moved -m option from cs2cs.1 to + proj.1 since it is only supported by proj. + + * nad/Makefile.am: added DESTDIR in three missing places as per + bug report from Peter Galbraith - proj debian package manager. + +Rel. 4.4.7 2003-03-31 +------------------------------------------------------------------------- + +2003-03-31 Frank Warmerdam + + * Prepare 4.4.7 Release. + + * nad/esri: incorporated Paul Ramsey's update. ESRI specific + coordinate systems in nad/esri.extra. + + * nad/epsg: Regenerated with towgs84 parameters properly generated + for non-greenwich prime meridians. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=304 + +2003-03-28 Frank Warmerdam + + * config.guess, config.sub: updated from + ftp://ftp.gnu.org/pub/gnu/config/ in order to resolve Debian build + problems on MIPS architecture. + + http://bugs.debian.org/cgi-bin/bugreport.cgi?archive=no&bug=186586 + + * src/pj_datums.c: fixed ire65 definition to refer to mod_airy, not + modif_airy as per: + http://bugzilla.remotesensing.org/show_bug.cgi?id=312 + +2003-03-26 Frank Warmerdam + + * src/pj_transform.c: Added check that srcdefn->inv actually exists! + + Per http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=301 + +2003-03-25 Frank Warmerdam + + * src/cs2cs.c: modified so that -f formats are used for Z as well as + x and y values. + As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=169056 + + * src/man/man1/cs2cs.1: removed -V flag ... it is not supported. + As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=162331 + +2003-03-17 Frank Warmerdam + + * src/pj_datums.c: changed NAD27 definition to make everything + optional, and to include alaska, and ntv2_0.gsb. + + nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat + + * src/pj_grid*, src/pj_apply_gridshift.c, src/nad_init.c: Lots of + changes introducing the PJ_GRIDINFO structure, support for skippable + grids ('@' prefix), delayed grid data loading and support for NTv2 + grids. + +2003-03-16 Frank Warmerdam + + * 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. Patch provided by Carl Anderson. + + http://bugzilla.remotesensing.org/show_bug.cgi?id=302 + +2003-03-03 Frank Warmerdam + + * Prepare 4.4.6 Release. + + * nad/epsg: updated to EPSG 6.2.2. + + * src/Makefile.am, nad/Makefile.am: a few fixes for Cygwin + compatibility, ensure /usr/local/share/proj get pre-created. + + * Incorporate src/PJ_lcca.c, the new "alternate" LCC implementation + provided by Gerald for some old maps. See his site for details. + + * Rebuild dependent files with automake 1.6.3, libtool 1.4.2 and + autoconf 2.53. + +2003-01-15 Frank Warmerdam + + * src/pj_datums.c: added some datums as suggested by the GRASS team. + +2002-12-14 Frank Warmerdam + + * src/projects.h, various others: updated header style in some files. + + * src/pj_geocent.c, src/pj_transform.c, src/pj_list.h, src/projects.h: + added support for geocentric coordinates in pj_transform() api. + + * src/pj_utils.c: Fixed pj_get_def() to return info on prime meridian. + +2002-12-08 Frank Warmerdam + + * src/cs2cs.c: added support for the -lm switch to report all + prime meridians. + + * src/pj_init.c, pj_transform.c, pj_datum.c: added preliminary + support for the +pm switch to set the prime meridian. + +2002-12-01 Frank Warmerdam + + * src/pj_transform.c: Applied fix for 7 parameter shifts in + pj_geocentric_from_wgs84() as per suggestion from Harald Lernbeiss in: + + http://bugzilla.remotesensing.org/show_bug.cgi?id=194 + +2002-11-19 Frank Warmerdam + + * src/cs2cs.c: cleanup memory at end to facility memory leak testing. + +2002-07-29 Frank Warmerdam + + * nad/esri: applied gradian related patches as per bug 184: + + http://bugzilla.remotesensing.org/show_bug.cgi?id=184 + +2002-07-25 Frank Warmerdam + + * nad/esri: added new ESRI translation file. Includes EPSG values + plus various ESRI extensions. + +2002-07-07 Frank Warmerdam + + * src/*.c, src/*.h, src/makefile.vc: *Many* changes to support + compiling all of the PROJ.4 source as C++ source. Add /TP to CFLAGS + in makefile.vc to test this on Windows. projects.h, and proj_api.h + attempt to export all externally visible functions with C linkage but + all code should now compile as C++. Currently only tested with VC++ 6. + +2002-06-11 Frank Warmerdam + + * src/pj_pr_list.c, proj.def, proj_api.h: Added the pj_get_def() + function to return an expanded definition from a projPJ handle, + including having the +init= section expanded. + +2002-05-30 Frank Warmerdam + + * src/geod/{geod.c,geod_for.c,geod_inv.c,geod_set.c,geodesic.h}: + Renamed a, S and f to geod_a, geod_S and geod_f to slightly reduce + the horrible naming conflict situations with geodesic.h. + http://bugzilla.remotesensing.org/show_bug.cgi?id=148 + +2002-04-30 Frank Warmerdam + + * html/faq.html: new + + * src/pj_apply_gridshift.c,pj_open_lib.c,nad_init.c: try to improve + debug output when datum shifting fails. + +2002-04-16 Frank Warmerdam + + * src/pj_list.c,src/PJ_krovak.c: Incorporated support for Krovak + projection as per submission by Thomas Fleming and Markus Neteler. + +2002-03-01 Frank Warmerdam + + * src/geod.c: Moved ctype.h up to avoid compile failure on MacOS X. + +2002-02-15 Frank Warmerdam + + * pj_transform.c: Provide zerod Z array in pj_datum_transform() if + none passed in. + +2002-01-23 Frank Warmerdam + + * Added proj.spec file provided by Intevation (FreeGIS CD). + +Rel. 4.4.5 2002/01/09 +------------------------------------------------------------------------- + +2002-01-09 Frank Warmerdam + + * src/geocent.c: Fixed serious bug in Convert_Geodetic_To_Geocentric() + that essentially ruins all datum shifting (except NAD tables). This + bug was introduced just in time for the PROJ 4.4.4 release. + + +2001-11-05 Frank Warmerdam + + * src/proj.def: added pj_strerrno and pj_errno as per request from + Bernhard Herzog. + + +Rel. 4.4.4 2001/09/15 +------------------------------------------------------------------------- + +2001-09-15 Frank Warmerdam + + * src/geocent.c: I have modified the Convert_Geodetic_To_Geocentric() + function to clamp Latitudes just a little out of the range + -PI/2 to PI/2 and to no longer do error checks on Longitudes since + they will be auto-wrapped by sin() and cos(). + + See http://bugzilla.remotesensing.org/show_bug.cgi?id=17 + + * nad/epsg: commited new updates with fixed units for us state plane + zones in feet, as reported by Marc-Andre. + +2001-08-23 Frank Warmerdam + + * src/makefile.vc: improved the setting of PROJ_LIB defaults. + + * src/pj_open_lib.c: added the pj_set_finder() entry point. + + * nad/epsg: fixed all LCC projections. The parameters were badly + mixed up. + +2001-08-11 Frank Warmerdam + + * src/proj.c: Generate an error message if +proj=latlong is used with + this program. As per bugzilla bug 70. + +2001-06-01 Frank Warmerdam + + * makefile.vc: emess.c directly linked into mainline programs. + + * pj_errno.c: added pj_get_errno_ref(). + +2001-05-14 Frank Warmerdam + + * upraded config.sub and config.guess as per debian bug report 97374. + +Rel. 4.4.3 2001/04/20 +------------------------------------------------------------------------- + +2001-04-20 Frank Warmerdam + + * Don't install test files in /usr/local/share/proj. + + * Made WGS84 the default in proj_def.dat + + * nad/test27,test83: Use -b flag for diff to avoid differences on + Windows due to CR/LF issues. + + * src/makefile.vc: default to building "all". + + * src/pj_init.c: call pj_open_lib() with mode of "rt" to ensure + correct handling of def files on DOS based systems. + + * Updated for 4.4.3 release (pj_release.c, Makefile.am, etc). + +2001-04-05 Frank Warmerdam + + * Introduce proj_api.h as a public include file with projects.h + now intended to be private. + + * pj_datums.c: added ntv1_can.dat to list for NAD27 datum. + + * nad_init(): added support for loading NTv1 style datum shift files. + + * cs2cs.c: use pj_latlong_from_proj() + + * pj_init.c: added pj_init_plus(). + + * pj_utils.c: new with pj_is_latlong(), and pj_latlong_from_proj() + functions. + + * pj_strerror.c: added error -43. + +2001-04-04 Frank Warmerdam + + * rewrote 7 param datum shift to match EPSG:9606, now works with + example. + +2001-03-20 Frank Warmerdam + + * Added -DPROJ_LIB=\"C:/PROJ/\" in src/makefile.vc to provide for + a default proj data file search directory. + + * Added HOWTO-RELEASE document in CVS. + +2001-03-15 Frank Warmerdam + + * src/pj_apply_gridshift.c: fixed bug in pj_load_nadgrids() which + would sometimes result in the load function failing because of a + buffer overrun in the grid list string. + +2001-03-14 Frank Warmerdam + + * added nad/epsg database of translations between EPSG PCS/GCS + codes and PROJ.4 definitions. + +2001-02-24 Frank Warmerdam + + * Include +ellps in proj example as per suggestion from Michael + DeChaine. + +2001-02-07 Frank Warmerdam + + * Cleaned up various warnings when compiled with -Wall. + +2001-02-03 Frank Warmerdam + + * Added cs2cs.1 man page, and minor updates to nad2nad.1 and proj.1. + + * Added pj_transform docs to pj_init.3. + +2001-01-25 Frank Warmerdam + + * Fixed pj_init() check for WGS84 match as per Bart Adriaanse bug rep. + +2000-12-15 Frank Warmerdam + + * src/makefile.vc: only delete proj.lib if it exists. + +2000-12-01 Frank Warmerdam + + * Added proj.def to extra_dist in src/Makefile.am. + +2000-11-29 Frank Warmerdam + + * Changed strtod() to proj_strtod() in strtod.c, and make use + of it in dmstor() to avoid having stuff like "5d10" interpreted + as exponential notation on MSVC. + +2000-11-18 Frank Warmerdam + + * Patch from Craig Bruce to adjlon.c to avoid wrong results, + and near-hangs when adjusting very large numbers. + http://bugzilla.remotesensing.org/show_bug.cgi?id=27 + +Rel. 4.4.2 2000/09/22 +------------------------------------------------------------------------- + +2000-09-22 Frank Warmerdam + + * Fixed src/Makefile.am install-exec-local target, and added + geocent.h, and emess.h. Reissued 4.4.2 distribution files. + + * Update version to 4.4.2, in preparation for 4.4.2 release. + + * Ensure makefile.vc is distributed, and mention windows building + in README. + + * Cast args to freev2() in bch2bps.c, and mk_cheby.c to avoid errors + on the Cray. + +2000-09-21 Frank Warmerdam + + * Added "sphere" to pj_ellps.c. + +2000-07-06 Frank Warmerdam + + * Fixed bug in nad_init() with path for datum shifting files. + + * Implemented cs2cs program for transforming between coordinate systems + including datum shifts. + + * Implemented proj=latlong pseudo-projection. + + * Implemented pj_transform() to transform from one coordinate system + to another, including applying geocentric datum shifts, and NAD27 + grid shifts. + + * Implemented 3/7 parameter geocentric datum shift support. + + * Added support for +datum, +towgs84, and +nadgrids parameters + when defining PJ's (for pj_init()). Added datum_type, and datum_params + to PJ structure. + +2000-07-04 Frank Warmerdam + + * Patched proj.c to handle binary io properly on Windows and DOS. + Patch submitted by Thomas Knudsen . + +2000-04-26 Frank Warmerdam + + * Added #define USE_PROJUV to projects.h to allow apps to + work properly against old and new version. + +2000-04-04 Frank Warmerdam + + * Patch from Craig Bruce (cbruce@cubewerx.com) for PJ_ortho.c + to make INVERSE() work well for points near zero. + +2000-03-29 Frank Warmerdam + + * Added hard links for invproj->proj and invgeod->geod in + src/Makefile.{am,in}. + +Rel. 4.4.1 2000/03/27 +------------------------------------------------------------------------- + +2000-03-27 Frank Warmerdam + + * Issued V4.4.1 Release. + + * Re-added install target for NADCON data files when available. + + * At the suggestion of John Evans, I have rolled the nad conversion + functions into the core library. + + * Updated COPYING file to MIT style license. Added man_proj.html + in html directory. + + * Add rules to install nad data files in $(prefix)/share/proj. + +2000-03-21 Frank Warmerdam + + * Converted to use libtool. + + * Wrote new configure.in, and use automake to generate makefiles. + + * Renamed UV to projUV to avoid conflicts on windows. + + * Reorganize ChangeLog, and start work on 4.4. + +Rel. 4.3.2 94/10/30 Base-line +------------------------------------------------------------------------- + +95/4/27 + Corrected rf factor for GRS67. + Thanks to: Peter Shih tyshih@cc.nctu.edu.tw + +95/6/3 + Gave an initializing value for pj_errno. Someone's compiler ignored + the whole module because nothing happened(!!!). + Thanks to: Mark Crispin . + +95/7/6 + Corrected function pj_inv_mlfn for improper derivative code. + Previous computations not in error but convergence was slower. + Thanks to: Tony Fisher fisher@minster.york.ac.uk. + +95/8/8 + Added Swiss Oblique Mercator projection. CH1903 Swiss grid system + parameters added to nad/world. added to nad/world file + and N-somerc.ps.Z added to documentation notes. + Thanks to: Daniel Ebneter, ebneter@iap.unibe.ch. + +95/9/5 + Changed declaration of "char c" to "int c" to more properly monitor + error return value in pj_init.c. + Thanks to: Alejo Hausner (ah@cs.princeton.edu) + +95/9/10 + Some minor file/internal name changes to facilitate xport to primative + systems. Documented entries unchanged. + +Rel. 4.3.1 94/2/16 Base-line +------------------------------------------------------------------------- + +94/6/2 + Transverse Mercator, spherical inverse fixed. Misplaced parenthsis. + +94/10/5 + Dropped dependency on FILENAME_MAX---too poorly defined in both + POSIX and ANSI standards. Adopted MAX_PATH_FILENAME which is + set to 1024 (should be enough for most cases). This should solve + problem with HP installations. + +94/10/29 + Problems with ellipsoidal for of azimuthal equidistant (PJ_aeqd.c). + Some discrepancies remain on comparison with Snyder's examples + but felt due to his use of TI calculator. Procedure should be + replaced with better geodesic routine. + +94/10/29 + Corrected and added examples to geod.1 documentation. + +94/10/30 + Added mkdir in nad/install otherwise nad2783 install may fail. + +Rel. 4.3 94/2/16 Base-line +------------------------------------------------------------------------- + +94/3/13 + Equidistant Conic forced es to 0, thus previous ellipsoid usage flawed. + + Correction to sign of convergence angle and other details in + pj_factors.c. + + Lambert Conf. conic corrected for +lat_0=90. + + Convergence sign in pj_factors.c corrected to conform to Bomford's + definition. Also procedure corrected for usage when projection + returns some of its own factors. + +94/3/17 + Added procedure pj_phi12 to support library. It gets and checks + standard parallels for some of the conics. + + Added SPECIAL entry to conics Lambert, Albers and Equidistant. + + Corrected nad/install.in test so as to only look for conus.lla.Z + as test for installation of NADCON datum matricies. + +94/3/19 + Problems with MAPGEN's mapdef choking on call to proj. Fixed + with PROJ.4.3-patch-01. + +94/3/22 + Bumb mode of handling memory allocation for 2D arrays, so that + execution of -L may not work on some systems. Interim corrections + distributed with PROJ.4.3-patch-02. + + Patched Make.2 to properly use $(LIBS). Not in patch. + + Apple's Unix libc has problems---no strerror and no %n in ?format. + +94/5/22 + Added several simple conics but not totally verified. + + Corrected proj.c so that resultant earth figure comments in -V + are prefixed with # and do not blow *mapdef*. + + Releasing current code without documentation on new conics pending + communications with Snyder on their veracity. Release mainly to + clean up patches. + +Rel. 4.2.2 93/9/30 Base-line +------------------------------------------------------------------------- + +93/11/14 + 1. Minor change to projects.h to correct prototype. + 2. Changes to pj_init.c regarding ignoring failure to open + proj_def.dat. + 3. Alternate method of initializing automatic array. + +93/11/16 + DOS distribution. + +93/11/28 + Added "Final" figure line to begining of -V option ouput. Allows + user to see results of +ellps and +R_V, etc. arguments. "Feature," + not an error. Mod to proj.c. + +93/12/03 + Removed non-ANSI usage of errno from PJ_laea. + Added test for previous definition of NULL in strtod.c. + +93/12/12 + Made aatan2 (compensates for 0,0 args) global. + +93/12/30 + Removed proj "error" message at end of -l option list. + +94/1 + Major revision to projection structure to facilitate maintenance. + Introduced PROJ_HEAD macro that is defined in several ways + dependent upon use. Allows generation of pj_list table from + `grep'ed projection files. Structure PJ now contains pointer + to const string giving ascii description of projection. Limited + application projection list much easier to generate with this system. + + Many new pseudocylindrical projections added as well as a few new + miscellaneous projections. Total projection count now 110. + +Rel. 4.2.1 93/9/30 Base-line +------------------------------------------------------------------------- + +93/10/3 + Geod incorrectly computed some forward values when geodesic on the + merdian. + +93/11/2 + Projection stere fails for polar cases because of 0 lat_ts. Fixed + by testing for lat_ts specification and setting to 90 degrees when + lat_ts not specified. UPS not affected. + +93/11/5 + Inverse polar stereographic also failed on 0 x xor y. Corrected. + +93/11/10 + Changed "install" to include "plain" system type for systems that + do not require special consideration. + +Rel. 4.2 93/8/25 Base-line +------------------------------------------------------------------------- + +93/9/13 + Improved bch2bps.c code. Old code not in error. + Still problems with DEC native C compiler. + +93/9/28 + Modified install script for DEC entry, forcing gcc for compilation. + +93/9/29 + Problem with due South forward in geod. Current version will not + be fixed as it is to be replaced with Vincente algorithm. + +93/9/30 + Two corrections in src/Makefile. + +Rel. 4.1.3 93/4/15 Base-line +------------------------------------------------------------------------- + +93/5/22 + Extensively revised Chebychev approximation procedures and added + conversion to power series. + +93/6/8 + Changed type of pj_param, plus mods to some other internal procedures. + +93/6/13 + Modified pj_factors. Principle mod was that calling program must + provide base for structure FACTORS. Additional mods reflect + optional analytic input from projection modules (see next entry). + + Modified base of PJ structure for projections to supply analytic + values of partial derivatives, scale factors and/or convergence + when formulary available. + + Added -V option for proj so as to provide more complete, verbose + analysis of projection characteristics at selected geographic or + cartesian point. + +93/6/14 + Pj_errno given its own module and projects.h declares it external. + To cover ANSI standards related to global variable. SG linker should + stop complaining. + +93/7/15 + Several additions and a couple of minor corrections to elliptical + tables. + +93/8/4 + PJ_ocea.c error in applying k0. + +93/8/19 + Minor general corrections. + Added nadcon conversion procedures and nad2nad program. + Projects.h modified to reflect nadcon prototypes and stuctures. + pj_open_lib extracted from pj_init and made global for use in nad_init. + +93/8/25 + Corrected pj_open_lib open for both binary and text modes. Mostly + for brain damaged DOS. Also affected calls in pj_init.c and nad_init.c + + Installs and other scripts updated. + +Rel. 4.1.2 93/4/4 Base-line +------------------------------------------------------------------------- + +93/4/8 + Corrected pj_inv so that errno and pj_errno are reset on entry. + +93/4/14 + Added elliptical forms to Azimuthal Equidistant (aeqd). + +93/4/15 + Corrected positive error return to negative in PJ_lcc.c . + + Added Indian units conversions to pj_units. + +Rel. 4.1.1 93/3/26 Base-line +------------------------------------------------------------------------- + +93/4/2 + gen_cheby.c - added header. + +93/4/3-4 + gen_cheby.c, projects.h - corrected gen_cheby argument declarations + related to 'proj' argument and prototype. Often signalled + warnings, but still managed to execute OK. + + pj_init.c - local function get_init had insufficient storage + defined for copy of file name and id. Added id define. + Strncat replaced with correct strncpy (amazingly did not + cause problems except of one system). + + Proj now compiles on DOS Microsoft 5.0 C compiler. MS suffers + same brain-damage as DEC, so requires local strtod function. + + pj_strerrno prototype added to projects.h + + DOS option in strtod.c for MS C's lack of standard macros in neaders. + +Rel. 4.1 93/3/8 Base-line --- @(#)CHANGE-LOG 4.14 95/09/23 GIE REL +------------------------------------------------------------------------- +93/3/20 + pj_init -- added +k_0 as alternative to +k so as to match documentation. + +93/3/21 + Laborde projection added. Primarily for Madagascar grid. + Considered BETA at moment until info obtained to give adequate + documentation. + +93/3/26 + Oblique Mercator modified to allow processing of Malasian Grid. + +no_uoff and +rot_conv options added. + +93/3/26 + Corrected text in Interim Report: + p. 12 - +phi's changed to +lat's + p. 12 - added updated Oblique Mercator documentation + +Unresolved: + +Reports of errno 25 persist. Do not know what platform. Reviewed + code and can't see problem. +Unknown platform has problem with pj_errno global and linker storage + allocation. Seems similar to SG problem that was over come with + -common switch. + diff --git a/proj4/Dockerfile b/proj4/Dockerfile new file mode 100644 index 000000000000..b84e312b075c --- /dev/null +++ b/proj4/Dockerfile @@ -0,0 +1,40 @@ +## +# osgeo/proj.4 + +FROM ubuntu:vivid + +MAINTAINER Howard Butler + + +# Setup build env +RUN mkdir /build +RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 16126D3A3E5C1192 \ + && apt-get update && apt-get install -y --fix-missing --no-install-recommends software-properties-common build-essential ca-certificates git make cmake wget unzip libtool automake python-pip libpython-dev libjpeg-dev zlib1g-dev \ + && apt-get remove --purge -y $BUILD_PACKAGES && rm -rf /var/lib/apt/lists/* + + +RUN mkdir /vdatum \ + && cd /vdatum \ + && wget http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj \ + && wget http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj \ + && rm -rf /vdatum + +RUN pip install Sphinx sphinx_bootstrap_theme rst2pdf --upgrade + +RUN git clone https://github.com/OSGeo/proj.4.git \ + && cd proj.4 \ + && ./autogen.sh \ + && ./configure --prefix=/usr \ + && make \ + && make install \ + && cd /proj.4/docs \ + && make html \ + && rm -rf /proj.4 + diff --git a/proj4/HOWTO-RELEASE b/proj4/HOWTO-RELEASE new file mode 100644 index 000000000000..d9b2f693d2af --- /dev/null +++ b/proj4/HOWTO-RELEASE @@ -0,0 +1,74 @@ + Preparing a PROJ.4 Release + ========================== + +1) Update the version number in configure.in (in AC_INIT()). + + 1a) Update the version number in PROJ_BUILD_VERSION in CMakeLists.txt + 1b) Update the version number in doc/source/conf.py + +2) Update the version number in proj_api.h (#define PJ_VERSION). + +3) Update the version number, and date in src/pj_release.c. + +4) Update the version number in the -version-info definition in + src/Makefile.am. It consists of "current:revision:age". Set + the same in the PROJ_SOVERSION variable in CMakeLists.txt + + 4a) Increment PROJ_BUILD_VERSION in CMakeLists.txt to follow + libtool versioning + + - If the library source code has changed at all since the last update, + then increment revision (c:r:a becomes c:r+1:a). + + - If any interfaces have been added, removed, or changed since the last + update, increment current, and set revision to 0. + + - If any interfaces have been added since the last public release, then + increment age. + + - If any interfaces have been removed since the last public release, then + set age to 0. + +4.5) Run "autogen.sh" (hopefully on the same machine it was last run on) + +5) Add a note to the ChangeLog that a new release is being issued, and what + the release number is. + +6) Update NEWS file with summary of release changes. + +7) Update the proj.spec file for the new version: + - PACKAGE_VERSION + - Source0 + - %setup line + - rm -rf line + +8) If this is a major release, prepare a branch. + + svn copy https://svn.osgeo.org/metacrs/proj/trunk \ + https://svn.osgeo.org/metacrs/proj/branches/4.7 + +9) Tag the release set in SVN + + svn copy https://svn.osgeo.org/metacrs/proj/branches/4.7 \ + https://svn.osgeo.org/metacrs/proj/tags/4.7.0 + +10) Do a "make dist-all" in the proj root directory. After some grinding + this should result in files like proj-4.4.3.tar.gz and proj-4.4.3.zip + being created. These are full source distributions. + +11) Put these in the proj ftp area on /osgeo/download/proj on + download.osgeo.org. This can be done via scp using a command like the + following. + + scp proj-4.4.3.{tar.gz,zip} warmerdam@download.osgeo.org:/osgeo/download/proj + +12) Announce the new release on the PROJ.4 and MetaCRS mailing lists. + +13) Issue a new release report on Freshmeat. + + http://freshmeat.net/projects/proj.4/ + +NOTES: + + o Information about preparing binary releases, and RPMs should be formalized. + o A "beta" release step should likely be incorporated. diff --git a/proj4/INSTALL b/proj4/INSTALL new file mode 100644 index 000000000000..b42a17ac4640 --- /dev/null +++ b/proj4/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/proj4/Makefile.am b/proj4/Makefile.am new file mode 100644 index 000000000000..3795cfdb623d --- /dev/null +++ b/proj4/Makefile.am @@ -0,0 +1,9 @@ +SUBDIRS = src man nad jniwrap cmake + +EXTRA_DIST = makefile.vc nmake.opt CMakeLists.txt + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = proj.pc + +AUTOMAKE_OPTIONS = dist-zip +ACLOCAL_AMFLAGS = -I m4 diff --git a/proj4/NEWS b/proj4/NEWS new file mode 100644 index 000000000000..6dedc727a52b --- /dev/null +++ b/proj4/NEWS @@ -0,0 +1,277 @@ +4.9.2 Release Notes +------------------- + + o proj_def.dat was missing from source distribution + see https://github.com/OSGeo/proj.4/issues/274 for more detail + + o Update Geodesic library from GeographicLib + + o Remove setlocale() use in pj_init_ctx() + + o Renamed PVALUE in pj_param.c to prevent clash with Windows + +4.9.1 Release Notes +------------------- + + o 4.9.0RC2 release was abandoned because it was not promoted in a + timely fashion. Subsequent maintenance of tickets has continued, + and a new 4.9.1 release was issued in its place. + + o Implement inverse solution for Winkel Tripel from Drazan Tutic #250 + + o More CMake configuration tweaks. The CMake configuration is probably + not at feature parity with the autotools builds at this point but it + is converging #256 + + o Tweak initialization ordering around setlocal which may have caused + issues #237 + + o Support out-of-tree autoconf builds more completely #247 + + o Fix NaN handling by geod_inverse and geod_polygon_addedge #251 & #253 + + o Update config.sub and config.guess #257 + + o Adapt Charles Karney's CMake patches for smoother build #258 + + o Define default PROJ_LIB location for CMake compilation #261 + + o Fix Windows compilation on PJ_aitoff.c + + o Align CMake SOVERSION with autotools #263 + + o Regenerate nad/epsg with GDAL r28536 to avoid precision loss in TOWGS84 + parameters, e.g. on Amersfoort / RD EPSG:4289 (#260) + + o Add CMake project-config.cmake scripts (#264 from Charles Karney) + + o Dial back test sensitivity #255 + +4.9.0 Release Notes +------------------- + + o Implement CMake as an option for building PROJ.4 + + o Implement new virtual file api (projFileAPI) so that all access to grid + shift and init files can be hooked. + + o Replace geodesic implementation with one from Charles Karney and add a + supported public interface (geodesic.h). + + o Upgraded to EPSG 8.5. + + o Removed old (deprecated) Java bindings in favor of the new api introduced + in 4.8.0. + + o Implement the calcofi (Cal Coop Ocean Fish Invest Lines/Stations) projection + + o Install projects.h again for applications that want access to internal + structures and functions despite the inherent fragility. + + o Various bug fixes and cleanup. + + o Added the CalCOFI pseudo-projection, #135 + +4.8.0 Release Notes +------------------- + + o Added the Natural Earth projection. + + o Added HEALPIX, rHEALPIX and Icosahedral Snyder Equal Area projections. + + o nad2bin now produces "CTable2" format grid shift files by default which + are platform independent. + + o nad2nad removed, use cs2cs for datum shift operations. + + o projects.h no longer installed as a public include file. Please try to + only use proj_api.h. + + o Add pj_get_spheroid_defn() accessor. + + o Added an alternate version of pj_init() that takes a projCtx (execution + context) structure to address multithreading issues with error management + and to provide a support for application hookable error reporting and + logging. + + o Upgrade to EPSG 7.9. Some changes in ideal datum selection. + + o JNI bindings reworked, org.proj4.Projections deprecated in favor of + org.proj4.PJ. + + o Added preliminary vertical datum support. + + o Fix various multithreading issues, particular in datum grid handling code. + + o Added support for the +axis= option for alternate axis orientations as + part of a coordinate system (used for TM South Orientated support). + + o +proj=omerc implementatioin replaced with code from libproj4. +rot_conv + flag no longer works, and some coordinate systems (ie. Malaysian) will + need to use +gamma instead. "epsg" init file updated accordingly. + + +4.7.0 Release Notes +------------------- + + o Added in memory caching of init file search results for substantial + acceleration in some application environments (like MapServer). + + o Regenerated nad/epsg init file with EPSG 7.1 database, including new + support for Google Mercator (EPSG:3857). + + o Various thread safety improvements, including preliminary support for + a mutex lock around some operations, like grid loading. + + +4.6.1 Release Notes +------------------- + + o Upgraded to EPSG 6.17 version for nad/epsg. Also corrected the precision + problem introduced in the last version. + + o Added logic for tmerc projection to fail rather than return crazy results + if more than 90 degrees away from the central meridian (#5). This change + may only be temporary till a more comprehensive solution is found. + + o Fixed handling of extra text in cs2cs. + + o Renamed INSTALL to INSTALL.TXT. + + o The eqc projection has been generalized to include a latitude of origin. + + o Added the glabsgm (Gauss Laborde / Sphere Geometric Mean) projection, + and gstmerc variation. + + o nad/IGNF init catalogue created. + + o added the ntf_r93.gsb datum shift file. + + o Add /Op in nmake.opt compile options to avoid VC7 optimization bug (#12) + + o Fix testvarious test script so it works properly when grid files available + + + +4.6.0 Release Notes +------------------- + + o MAJOR: Rework pj_transform() to avoid applying ellipsoid to ellipsoid + transformations as a datum shift when no datum info is available. + + o Avoid applying "change of ellipsoid" during datum shifting based on + ellipsoids getting changed to spheres for spherical projections. + + o Upgrade to EPSG 6.13 + + o Added "900913" "Google Mercator" code in nad/esri.extra. + + o Avoid some static variable based multi-threading problems. + + o Improve error recovery if ctable style datum shift grid fails to load. + + o Support drive letters properly in PROJ_LIB paths for win32. + + o Fix occasional problem with DMS parsing. + + o Removed non-functional mpoly projection. + + o add lonlat, and latlon as aliases for longlat. + + +4.5.0 Release Notes +------------------- + + o Microsoft Visual Studio 8 compatibility changes. + + o Upgraded to EPSG 6.11.1 database. + + o Several bug fixes to pj_transform() to handle transient errors properly. + + o Fix Krovak projection (include +czech flag) + + o Added Roussilhe Stereographic projection from libproj4 (proj=rouss). + + o Added experimental +lon_wrap flag for alternate pj_transform() longitude + wrapping behavior on output. + + +4.4.9 Release Notes +------------------- + + o Win32 build uses proj.dll by default now. + + o Added accessor functions for the datums, ellps, prime_meridians, units and + main projection definition lists so they can be used on windows where + data objects exported from the DLL don't work easily. + + o Added JNI (Java Native Interface) support within the jniwrap directory, + and some supporting entry points directly in the proj dll/so. See + --with-jni configure switch, and jniwrap/README. + + o Added the proj=stereoa and proj=geos projections, incorporated from + Gerald's libproj4. + + o A few other bug fixes. + + +4.4.8 Release Notes +------------------- + + o Updated epsg file to EPSG 6.5, added other.extra pseudo-EPSG WMS definitions + + o Made significant fixes to prime meridian support. + + o Substantially change pj_datum_transform(), so it and pj_transform() will + work between coordinate systems with different ellipsoids but no datum + shift information (assume +towgs84=0,0,0). + + o Added pj_get_release() function. + + o Ensure pj_transform() will try to transform all points in provided list if + even some might transform properly. + + o Improved the accuracy of Geocentric_To_Geodetic() via an iterative + solution. + + o Various other bug fixes. + + +4.4.7 Release Notes +------------------- + + o Added NTv2 (.gsb) grid shift file support. + + o Modified datum shift support so that data file data is only loaded if + needed. Also added 'null' grid as a fallback option, and support for + making grids optional (prefix with '@' in +nadgrids). + + o Regenerated nad/epsg file with towgs84 parameters for non-greenwich prime + meridians. + + o Updated nad/esri file with better generated form from Paul Ramsey. + + o Various bug fixes. + + +4.4.6 Release Notes +------------------- + + o Incorporated new lcca (Lambert Conformal Conic Alternate) projection from + Gerald. + + o Updated 'espg' translation file for EPSG 6.2.2 with better support for + prime meridians. + + o Added Prime Meridians via +pm command switch to cs2cs (and pj_transform). + + o Fixed bug with 7 parameter transforms. + + o Added 'esri' pseudo-epsg coordinate system file. + + o Cleanup so that PROJ.4 compiles clean as C++ code. + + o Added pj_get_def() to expand definitions of stuff like +init clauses. + + o Added a Krovak implementation (proj=krov). Note this may change again + in the next release. diff --git a/proj4/README b/proj4/README new file mode 100644 index 000000000000..70f9838f03bc --- /dev/null +++ b/proj4/README @@ -0,0 +1,130 @@ + -------------------- P R O J . 4 -------------------- + +This is Release 4.4 of cartographic projection software. + +PLEASE read the following information as well as READMEs in the src +and nad directories. + +For more information on PROJ.4 maintenance please see the web page at: + + http://www.remotesensing.org/proj + or + http://proj.maptools.org/ + + --------------------------------------------------- + +Installation: +------------- + +FSF's configuration procedure is used to ease installation of the +PROJ.4 system. + +The default destination path prefix for installed files is /usr/local. +Results from the installation script will be placed into subdirectories +bin, include, lib, man/man1 and man/man3. If this default path prefix +is proper, then execute: + + ./configure + +If another path prefix is required, then execute: + + ./configure --prefix=/my/path + +In either case, the directory of the prefix path must exist and be +writable by the installer. + +After executing configure, execute: + + make + make install + +The install target will create, if necessary, all required sub-directories. + +Windows Build +------------- + +PROJ.4 can be built with Microsoft Visual C/C++ using the makefile.vc +in the PROJ directory. First edit the PROJ\nmake.opt and modify +the INSTDIR value at the top to point to the directory where +the PROJ tree shall be installed. If you want to install into +C:\PROJ, it can remain unchanged. +Then use the makefile.vc to build the software: + +eg. +C:\> cd proj +C:\PROJ> nmake /f makefile.vc +C:\PROJ> nmake /f makefile.vc install-all + +Note that you have to have the VC++ environment variables, and path +setup properly. This may involve running the VCVARS32.BAT script out +of the Visual C++ tree. + +The makefile.vc builds proj.exe, proj.dll and proj.lib. + +It should also be possible to build using the Unix instructions +and Cygwin32, but this hasn't been tested recently. + + + --------------------------------------------------- + +Distribution files and format. +------------------------------ + +Sources are distributed in one or more files. The principle elements +of the system are in a compress tar file named `PROJ.4.x.tar.gz' where +"x" will indicate level.sub-level of the release. For U.S. users +interested in NADCON datum shifting procedures, additional files +containing conversion matricies are distributed with the name +`PROJ.4.x.y.tar' where y is an uppercase letter starting with "A." +These supplementary files will contain compressed files and thus +the tar file is not compressed. + +Interim reports on Rel. 4 proj are available in PostScript form as +*.ps.gz . New and old users are strongly recommended to carefully read +these manuals. They are supplements and NOT a replacement for the full +manual OF 90-284 (which new users should also obtain). + + --------------------------------------------------- + +Principle new aspects of system: +-------------------------------- + +ANSI X3.159-1989 C code. Site must have ANSI C compiler and header files. + +Several method of determining radius from specified ellipsoid. + +Use of initialization files through +init=file:key. Default projection +specifications also may be defined in an ASCII file. + ++inv option REMOVED and -I may be used in its place. Use of invproj +alias of proj still functions as per Rel.3. + ++ellps=list and +proj=list REMOVED. Use respective -le and -lp. + ++units= to specify cartesian coordinate system units. To get list +use -lu. + +-v added to dump final cartographic parameters employed. + +Addition of computing scale factors and angular distortion added through +-S option. Valuable for designing new projection parameter details. + +-V option which verbosely lists projected point characteristics. + +Programmers may use projection library with calls to pj_init, +pj_fwd, pj_inv and pj_transform. + +Program nad2nad for conversion of data to and from NAD27 and NAD83 +datums. + +Program cs2cs for converting between coordinate systems, with optional +datum translation. + +------------------------------------------------------------- + +Things currently left undone: +---------------------------- + +proj_def.dat NOT fully in place. Needs additional settings for +many of the projections. Probably will not be completed until main +manual rewritten. diff --git a/proj4/appveyor.yml b/proj4/appveyor.yml new file mode 100644 index 000000000000..9397d627aae3 --- /dev/null +++ b/proj4/appveyor.yml @@ -0,0 +1,55 @@ +platform: +- x64 +- x86 + +environment: + matrix: + + - BUILD_TYPE: nmake + +# Does not work +# VS 2008 +# - BUILD_TYPE: cmake +# VS_VERSION: Visual Studio 9 2008 + +# VS 2010 + - BUILD_TYPE: cmake + VS_VERSION: Visual Studio 10 + +# VS 2012 + - BUILD_TYPE: cmake + VS_VERSION: Visual Studio 11 + +# VS 2013 + - BUILD_TYPE: cmake + VS_VERSION: Visual Studio 12 + +shallow_clone: true + +build_script: + - echo build_script + - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x86" call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat" + - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 + - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" call "%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64 + - if "%BUILD_TYPE%" == "nmake" nmake /f makefile.vc SELFTEST=1 + - if "%BUILD_TYPE%" == "nmake" nmake /f makefile.vc install-all + - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" cd src + - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" nmake /f makefile.vc SELFTEST=1 multistresstest.exe +# Disabled for now as it scales badly +# - if "%BUILD_TYPE%" == "nmake" if "%platform%" == "x64" multistresstest.exe + - if "%BUILD_TYPE%" == "cmake" if "%platform%" == "x64" SET VS_FULL=%VS_VERSION% Win64 + - if "%BUILD_TYPE%" == "cmake" if "%platform%" == "x86" SET VS_FULL=%VS_VERSION% + - if "%BUILD_TYPE%" == "cmake" echo "%VS_FULL%" + - if "%BUILD_TYPE%" == "cmake" cmake -G "%VS_FULL%" . -DSELFTEST=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=../bin -DBUILD_LIBPROJ_SHARED=ON + - if "%BUILD_TYPE%" == "cmake" cmake --build . --config Release + +test_script: + - echo test_script + - if "%BUILD_TYPE%" == "nmake" cd C:\PROJ\bin + - if "%BUILD_TYPE%" == "cmake" cd C:\projects\proj-4\bin + - echo "Contents of current directory:" + - dir + - proj.exe -VC + +deploy: off + diff --git a/proj4/autogen.sh b/proj4/autogen.sh new file mode 100755 index 000000000000..e76f3bd9eb17 --- /dev/null +++ b/proj4/autogen.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Autotools boostrapping script +# +giveup() +{ + echo + echo " Something went wrong, giving up!" + echo + exit 1 +} + +OSTYPE=`uname -s` + +for libtoolize in glibtoolize libtoolize; do + LIBTOOLIZE=`which $libtoolize 2>/dev/null` + if test "$LIBTOOLIZE"; then + break; + fi +done + +#AMFLAGS="--add-missing --copy --force-missing" +AMFLAGS="--add-missing --copy" +if test "$OSTYPE" = "IRIX" -o "$OSTYPE" = "IRIX64"; then + AMFLAGS=$AMFLAGS" --include-deps"; +fi + +echo "Running aclocal" +aclocal -I ./m4 || giveup +echo "Running autoheader" +autoheader || giveup +echo "Running libtoolize" +$LIBTOOLIZE --force --copy || giveup +echo "Running automake" +automake $AMFLAGS # || giveup +echo "Running autoconf" +autoconf || giveup + +echo "======================================" +echo "Now you are ready to run './configure'" +echo "======================================" diff --git a/proj4/cmake/CMakeLists.txt b/proj4/cmake/CMakeLists.txt new file mode 100644 index 000000000000..742da0e99862 --- /dev/null +++ b/proj4/cmake/CMakeLists.txt @@ -0,0 +1,29 @@ +# proj-config.cmake for the install tree. It's installed in +# ${INSTALL_CMAKE_DIR} and @PROJECT_ROOT_DIR@ is the relative +# path to the root from there. (Note that the whole install tree can +# be relocated.) +if (NOT WIN32) + set (INSTALL_CMAKE_DIR "share/cmake/${PROJECT_NAME}") + set (PROJECT_ROOT_DIR "../../..") +else () + set (INSTALL_CMAKE_DIR "cmake") + set (PROJECT_ROOT_DIR "..") +endif () + +string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER) +configure_file (project-config.cmake.in project-config.cmake @ONLY) +configure_file (project-config-version.cmake.in + project-config-version.cmake @ONLY) +install (FILES + "${CMAKE_CURRENT_BINARY_DIR}/project-config.cmake" + DESTINATION "${INSTALL_CMAKE_DIR}" + RENAME "${PROJECT_NAME_LOWER}-config.cmake") +install (FILES + "${CMAKE_CURRENT_BINARY_DIR}/project-config-version.cmake" + DESTINATION "${INSTALL_CMAKE_DIR}" + RENAME "${PROJECT_NAME_LOWER}-config-version.cmake") +# Make information about the cmake targets (the library and the tools) +# available. +install (EXPORT targets + FILE ${PROJECT_NAME_LOWER}-targets.cmake + DESTINATION "${INSTALL_CMAKE_DIR}") diff --git a/proj4/cmake/Makefile.am b/proj4/cmake/Makefile.am new file mode 100644 index 000000000000..4cf5fc7e9441 --- /dev/null +++ b/proj4/cmake/Makefile.am @@ -0,0 +1,14 @@ +EXTRA_DIST = CMakeLists.txt \ + Proj4InstallPath.cmake \ + Proj4SystemInfo.cmake \ + Proj4Utilities.cmake \ + proj_config.cmake.in \ + Proj4Config.cmake \ + Proj4Mac.cmake \ + Proj4Test.cmake \ + Proj4Version.cmake \ + policies.cmake \ + proj_config.cmake.in \ + project-config-version.cmake.in \ + project-config.cmake.in + diff --git a/proj4/cmake/Proj4Config.cmake b/proj4/cmake/Proj4Config.cmake new file mode 100644 index 000000000000..fda9c9c263a2 --- /dev/null +++ b/proj4/cmake/Proj4Config.cmake @@ -0,0 +1,41 @@ +################################################################################ +# SociConfig.cmake - CMake build configuration of SOCI library +################################################################################ +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +################################################################################ +include (CheckIncludeFiles) +include (CheckLibraryExists) +include (CheckFunctionExists) + +# check needed include file +check_include_files (dlfcn.h HAVE_DLFCN_H) +check_include_files (inttypes.h HAVE_INTTYPES_H) +check_include_files (jni.h HAVE_JNI_H) +check_include_files (memory.h HAVE_MEMORY_H) +check_include_files (stdint.h HAVE_STDINT_H) +check_include_files (stdlib.h HAVE_STDLIB_H) +check_include_files (string.h HAVE_STRING_H) +check_include_files (sys/stat.h HAVE_SYS_STAT_H) +check_include_files (sys/types.h HAVE_SYS_TYPES_H) +check_include_files (unistd.h HAVE_UNISTD_H) +check_include_files("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) + +CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV) + +# check libm need on unix +check_library_exists(m ceil "" HAVE_LIBM) + +set(PACKAGE "proj") +set(PACKAGE_BUGREPORT "warmerdam@pobox.com") +set(PACKAGE_NAME "PROJ.4 Projections") +set(PACKAGE_STRING "PROJ.4 Projections ${${PROJECT_INTERN_NAME}_VERSION}") +set(PACKAGE_TARNAME "proj") +set(PACKAGE_VERSION "${${PROJECT_INTERN_NAME}_VERSION}") + +configure_file(cmake/proj_config.cmake.in src/proj_config.h) + + diff --git a/proj4/cmake/Proj4InstallPath.cmake b/proj4/cmake/Proj4InstallPath.cmake new file mode 100644 index 000000000000..da1491c04125 --- /dev/null +++ b/proj4/cmake/Proj4InstallPath.cmake @@ -0,0 +1,67 @@ +#---------------------------------------------- +# installation path settings +#---------------------------------------------- +if(WIN32) + if(DEFINED ENV{OSGEO4W_ROOT}) + set(OSGEO4W_ROOT_DIR $ENV{OSGEO4W_ROOT}) + else() + set(OSGEO4W_ROOT_DIR c:/OSGeo4W) + endif() + set(DEFAULT_PROJ_ROOT_DIR ${OSGEO4W_ROOT_DIR}) +endif() +if(UNIX) + set(DEFAULT_PROJ_ROOT_DIR "/usr/local/") +endif(UNIX) + + +IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET(CMAKE_INSTALL_PREFIX ${DEFAULT_PROJ_ROOT_DIR} CACHE PATH "Foo install + prefix" FORCE) +ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + +#TODO +# for data install testing the PROJ_LIB envVar + +if(WIN32) + set(DEFAULT_BIN_SUBDIR bin) + set(DEFAULT_LIB_SUBDIR local/lib) + set(DEFAULT_DATA_SUBDIR share) + set(DEFAULT_INCLUDE_SUBDIR local/include) + set(DEFAULT_DOC_SUBDIR share/doc/proj) +else() + # Common locatoins for Unix and Mac OS X + set(DEFAULT_BIN_SUBDIR bin) + set(DEFAULT_LIB_SUBDIR lib) + set(DEFAULT_DATA_SUBDIR share/proj) + set(DEFAULT_DOC_SUBDIR doc/proj) + set(DEFAULT_INCLUDE_SUBDIR include) +endif() + +# Locations are changeable by user to customize layout of PDAL installation +# (default values are platform-specific) +set(PROJ_BIN_SUBDIR ${DEFAULT_BIN_SUBDIR} CACHE STRING + "Subdirectory where executables will be installed") +set(PROJ_LIB_SUBDIR ${DEFAULT_LIB_SUBDIR} CACHE STRING + "Subdirectory where libraries will be installed") +set(PROJ_INCLUDE_SUBDIR ${DEFAULT_INCLUDE_SUBDIR} CACHE STRING + "Subdirectory where header files will be installed") +set(PROJ_DATA_SUBDIR ${DEFAULT_DATA_SUBDIR} CACHE STRING + "Subdirectory where data will be installed") +set(PROJ_DOC_SUBDIR ${DEFAULT_DOC_SUBDIR} CACHE STRING + "Subdirectory where data will be installed") + +# Mark *DIR variables as advanced and dedicated to use by power-users only. +mark_as_advanced(PROJ_ROOT_DIR + PROJ_BIN_SUBDIR + PROJ_LIB_SUBDIR + PROJ_INCLUDE_SUBDIR + PROJ_DATA_SUBDIR + PROJ_DOC_SUBDIR ) + +set(DEFAULT_BINDIR "${PROJ_BIN_SUBDIR}") +set(DEFAULT_LIBDIR "${PROJ_LIB_SUBDIR}") +set(DEFAULT_DATADIR "${PROJ_DATA_SUBDIR}") +set(DEFAULT_DOCDIR "${PROJ_DOC_SUBDIR}") +set(DEFAULT_INCLUDEDIR "${PROJ_INCLUDE_SUBDIR}") + + diff --git a/proj4/cmake/Proj4Mac.cmake b/proj4/cmake/Proj4Mac.cmake new file mode 100644 index 000000000000..9032d056d306 --- /dev/null +++ b/proj4/cmake/Proj4Mac.cmake @@ -0,0 +1,23 @@ +if(APPLE) +set(FRAMEWORKDIR "Library/Frameworks" CACHE PATH "the path to install framework") + set(BUNDLEDIR "Applications/OSGEO" CACHE PATH "the path to install bundle") + file(RELATIVE_PATH BUNDLE_FRAME_REL_PATH_AAA "/${FRAMEWORKDIR}" "/aaa") + string(LENGTH ${BUNDLE_FRAME_REL_PATH_AAA} AAA_LENGTH) + math(EXPR RELATIVE_PATH_LENGTH "${AAA_LENGTH}-4") + string(SUBSTRING ${BUNDLE_FRAME_REL_PATH_AAA} 0 ${RELATIVE_PATH_LENGTH} BUNDLE_FRAME_REL_PATH) + set(PROJ_INSTALL_NAME_DIR "@executable_path/${BUNDLE_FRAME_REL_PATH}/${FRAMEWORKDIR}" ) +else(APPLE) + set(FRAMEWORKDIR "") + set(BUNDLEDIR "") + set(PROJ_INSTALL_NAME_DIR "") +endif(APPLE) + +set(PROJ_RESOURCES "" ) + +if(APPLE) + option(BUILD_FRAMEWORKS_AND_BUNDLE "if set to ON, build a library framework and application bundle, otherwise install classical UNIX bin/lib" OFF ) + set(DEFAULT_BINDIR ${BUNDLEDIR}) + boost_report_value(BUNDLEDIR) + boost_report_value(PROJ_INSTALL_NAME_DIR) + boost_report_value(FRAMEWORKDIR) +endif(APPLE) diff --git a/proj4/cmake/Proj4SystemInfo.cmake b/proj4/cmake/Proj4SystemInfo.cmake new file mode 100644 index 000000000000..294a50b28ebe --- /dev/null +++ b/proj4/cmake/Proj4SystemInfo.cmake @@ -0,0 +1,83 @@ +################################################################################ +# SociSystemInfo.cmake - part of CMake configuration of Proj.4 library +# +# Based on idea taken from http://code.google.com/p/softart/ project +################################################################################ +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +################################################################################ +# The following variables are defined: +# PROJ_COMPILER_NAME - name of compiler toolset, follows Boost toolset naming. +# PROJ_PLATFORM_NAME - target platform name: x64, x86 or win32 +################################################################################ + +set(PROJ_COMPILER_NAME) +set(PROJ_PLATFORM_NAME) + +if(MINGW OR UNIX) + exec_program(gcc ARGS -dumpversion OUTPUT_VARIABLE GCC_VERSION) + string(REPLACE "." "" GCC_VERSION_STR_FULL ${GCC_VERSION}) + string(REGEX MATCH "[0-9]+\\.[0-9]+" GCC_VERSION_MAJOR_MINOR ${GCC_VERSION}) +endif() + +if(WIN32) + # Compilers, taken from http://predef.sourceforge.net/precomp.html#sec34 + if(MSVC) + if(MSVC_VERSION EQUAL 1200) + set(PROJ_COMPILER_NAME "msvc-6.0") + endif() + if(MSVC_VERSION EQUAL 1300) + set(PROJ_COMPILER_NAME "msvc-7.0") + endif() + if(MSVC_VERSION EQUAL 1310) + set(PROJ_COMPILER_NAME "msvc-7.1") #Visual Studio 2003 + endif() + if(MSVC_VERSION EQUAL 1400) + set(PROJ_COMPILER_NAME "msvc-8.0") #Visual Studio 2005 + endif() + if(MSVC_VERSION EQUAL 1500) + set(PROJ_COMPILER_NAME "msvc-9.0") #Visual Studio 2008 + endif() + if(MSVC_VERSION EQUAL 1600) + set(PROJ_COMPILER_NAME "msvc-10.0") #Visual Studio 2010 + endif() + if(MSVC_VERSION EQUAL 1700) + set(PROJ_COMPILER_NAME "msvc-11.0") #Visual Studio 2012 + endif() + if(MSVC_VERSION EQUAL 1800) + set(PROJ_COMPILER_NAME "msvc-12.0") #Visual Studio 2013 + endif() + endif(MSVC) + + if(MINGW) + set(PROJ_COMPILER_NAME "mingw-${GCC_VERSION}") + endif( MINGW ) + + if(CMAKE_GENERATOR MATCHES "Win64") + set(PROJ_PLATFORM_NAME "x64") + else() + set(PROJ_PLATFORM_NAME "win32") + endif() +endif(WIN32) + +if(UNIX) + set(PROJ_COMPILER_NAME "gcc-${GCC_VERSION}") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(PROJ_PLATFORM_NAME "x64") + else() + set(PROJ_PLATFORM_NAME "x86") + endif() +endif(UNIX) + +if(NOT PROJ_COMPILER_NAME) + colormsg(_RED_ "WARNING:") + colormsg(RED "Could not determine compiler toolset name to set PROJ_COMPILER_NAME variable.") +endif() + +if(NOT PROJ_COMPILER_NAME) + colormsg(_RED_ "WARNING:") + colormsg(RED "Could not determine platform name to set PROJ_COMPILER_NAME variable.") +endif() diff --git a/proj4/cmake/Proj4Test.cmake b/proj4/cmake/Proj4Test.cmake new file mode 100644 index 000000000000..a289f0c5a7b8 --- /dev/null +++ b/proj4/cmake/Proj4Test.cmake @@ -0,0 +1,32 @@ +# +# add test with sh script +# + +function(proj_add_test_script_sh SH_NAME BIN_USE) + if(UNIX) + get_filename_component(testname ${SH_NAME} NAME_WE) + + set(TEST_OK 1) + if(ARGV2) + set(TEST_OK 0) + set(GRID_FULLNAME ${PROJECT_SOURCE_DIR}/nad/${ARGV2}) + if(EXISTS ${GRID_FULLNAME}) + set(TEST_OK 1) + endif(EXISTS ${GRID_FULLNAME}) + endif(ARGV2) + + if( CMAKE_VERSION VERSION_LESS 2.8.4 ) + set(TEST_OK 0) + message(STATUS "test with bash script need a cmake version >= 2.8.4") + endif() + + if(${TEST_OK}) + add_test( NAME "${testname}" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/nad + COMMAND ${PROJECT_SOURCE_DIR}/nad/${SH_NAME} + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${${BIN_USE}} + ) + endif(${TEST_OK}) + + endif(UNIX) +endfunction() diff --git a/proj4/cmake/Proj4Utilities.cmake b/proj4/cmake/Proj4Utilities.cmake new file mode 100644 index 000000000000..24b61701306d --- /dev/null +++ b/proj4/cmake/Proj4Utilities.cmake @@ -0,0 +1,456 @@ +################################################################################ +# SociUtilities.cmake - part of CMake configuration of Proj4 library +# +# Based on BoostUtilities.cmake from CMake configuration for Boost +################################################################################ +# Copyright (C) 2007 Douglas Gregor +# Copyright (C) 2007 Troy Straszheim +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0. +# See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt +################################################################################ +# Macros in this module: +# +# list_contains: Determine whether a string value is in a list. +# +# car: Return the first element in a list +# +# cdr: Return all but the first element in a list +# +# parse_arguments: Parse keyword arguments for use in other macros. +# +# proj_report_directory_property +# +# proj_target_output_name: +# +################################################################################ + +# This utility macro determines whether a particular string value +# occurs within a list of strings: +# +# list_contains(result string_to_find arg1 arg2 arg3 ... argn) +# +# This macro sets the variable named by result equal to TRUE if +# string_to_find is found anywhere in the following arguments. +macro(list_contains var value) + set(${var}) + foreach (value2 ${ARGN}) + if (${value} STREQUAL ${value2}) + set(${var} TRUE) + endif (${value} STREQUAL ${value2}) + endforeach (value2) +endmacro(list_contains) + +# This utility macro extracts the first argument from the list of +# arguments given, and places it into the variable named var. +# +# car(var arg1 arg2 ...) +macro(car var) + set(${var} ${ARGV1}) +endmacro(car) + +# This utility macro extracts all of the arguments given except the +# first, and places them into the variable named var. +# +# car(var arg1 arg2 ...) +macro(cdr var junk) + set(${var} ${ARGN}) +endmacro(cdr) + +# The parse_arguments macro will take the arguments of another macro and +# define several variables. The first argument to parse_arguments is a +# prefix to put on all variables it creates. The second argument is a +# list of names, and the third argument is a list of options. Both of +# these lists should be quoted. The rest of parse_arguments are +# arguments from another macro to be parsed. +# +# parse_arguments(prefix arg_names options arg1 arg2...) +# +# For each item in options, parse_arguments will create a variable with +# that name, prefixed with prefix_. So, for example, if prefix is +# MY_MACRO and options is OPTION1;OPTION2, then parse_arguments will +# create the variables MY_MACRO_OPTION1 and MY_MACRO_OPTION2. These +# variables will be set to true if the option exists in the command line +# or false otherwise. +# +# For each item in arg_names, parse_arguments will create a variable +# with that name, prefixed with prefix_. Each variable will be filled +# with the arguments that occur after the given arg_name is encountered +# up to the next arg_name or the end of the arguments. All options are +# removed from these lists. parse_arguments also creates a +# prefix_DEFAULT_ARGS variable containing the list of all arguments up +# to the first arg_name encountered. +macro(parse_arguments prefix arg_names option_names) + set(DEFAULT_ARGS) + foreach(arg_name ${arg_names}) + set(${prefix}_${arg_name}) + endforeach(arg_name) + foreach(option ${option_names}) + set(${prefix}_${option} FALSE) + endforeach(option) + + set(current_arg_name DEFAULT_ARGS) + set(current_arg_list) + foreach(arg ${ARGN}) + list_contains(is_arg_name ${arg} ${arg_names}) + if (is_arg_name) + set(${prefix}_${current_arg_name} ${current_arg_list}) + set(current_arg_name ${arg}) + set(current_arg_list) + else (is_arg_name) + list_contains(is_option ${arg} ${option_names}) + if (is_option) + set(${prefix}_${arg} TRUE) + else (is_option) + set(current_arg_list ${current_arg_list} ${arg}) + endif (is_option) + endif (is_arg_name) + endforeach(arg) + set(${prefix}_${current_arg_name} ${current_arg_list}) +endmacro(parse_arguments) + +# Perform a reverse topological sort on the given LIST. +# +# topological_sort(my_list "MY_" "_EDGES") +# +# LIST is the name of a variable containing a list of elements to be +# sorted in reverse topological order. Each element in the list has a +# set of outgoing edges (for example, those other list elements that +# it depends on). In the resulting reverse topological ordering +# (written back into the variable named LIST), an element will come +# later in the list than any of the elements that can be reached by +# following its outgoing edges and the outgoing edges of any vertices +# they target, recursively. Thus, if the edges represent dependencies +# on build targets, for example, the reverse topological ordering is +# the order in which one would build those targets. +# +# For each element E in this list, the edges for E are contained in +# the variable named ${PREFIX}${E}${SUFFIX}, where E is the +# upper-cased version of the element in the list. If no such variable +# exists, then it is assumed that there are no edges. For example, if +# my_list contains a, b, and c, one could provide a dependency graph +# using the following variables: +# +# MY_A_EDGES b +# MY_B_EDGES +# MY_C_EDGES a b +# +# With the involcation of topological_sort shown above and these +# variables, the resulting reverse topological ordering will be b, a, +# c. +function(topological_sort LIST PREFIX SUFFIX) + # Clear the stack and output variable + set(VERTICES "${${LIST}}") + set(STACK) + set(${LIST}) + + # Loop over all of the vertices, starting the topological sort from + # each one. + foreach(VERTEX ${VERTICES}) + string(TOUPPER ${VERTEX} UPPER_VERTEX) + + # If we haven't already processed this vertex, start a depth-first + # search from where. + if (NOT FOUND_${UPPER_VERTEX}) + # Push this vertex onto the stack with all of its outgoing edges + string(REPLACE ";" " " NEW_ELEMENT + "${VERTEX};${${PREFIX}${UPPER_VERTEX}${SUFFIX}}") + list(APPEND STACK ${NEW_ELEMENT}) + + # We've now seen this vertex + set(FOUND_${UPPER_VERTEX} TRUE) + + # While the depth-first search stack is not empty + list(LENGTH STACK STACK_LENGTH) + while(STACK_LENGTH GREATER 0) + # Remove the vertex and its remaining out-edges from the top + # of the stack + list(GET STACK -1 OUT_EDGES) + list(REMOVE_AT STACK -1) + + # Get the source vertex and the list of out-edges + separate_arguments(OUT_EDGES) + list(GET OUT_EDGES 0 SOURCE) + list(REMOVE_AT OUT_EDGES 0) + + # While there are still out-edges remaining + list(LENGTH OUT_EDGES OUT_DEGREE) + while (OUT_DEGREE GREATER 0) + # Pull off the first outgoing edge + list(GET OUT_EDGES 0 TARGET) + list(REMOVE_AT OUT_EDGES 0) + + string(TOUPPER ${TARGET} UPPER_TARGET) + if (NOT FOUND_${UPPER_TARGET}) + # We have not seen the target before, so we will traverse + # its outgoing edges before coming back to our + # source. This is the key to the depth-first traversal. + + # We've now seen this vertex + set(FOUND_${UPPER_TARGET} TRUE) + + # Push the remaining edges for the current vertex onto the + # stack + string(REPLACE ";" " " NEW_ELEMENT + "${SOURCE};${OUT_EDGES}") + list(APPEND STACK ${NEW_ELEMENT}) + + # Setup the new source and outgoing edges + set(SOURCE ${TARGET}) + string(TOUPPER ${SOURCE} UPPER_SOURCE) + set(OUT_EDGES + ${${PREFIX}${UPPER_SOURCE}${SUFFIX}}) + endif(NOT FOUND_${UPPER_TARGET}) + + list(LENGTH OUT_EDGES OUT_DEGREE) + endwhile (OUT_DEGREE GREATER 0) + + # We have finished all of the outgoing edges for + # SOURCE; add it to the resulting list. + list(APPEND ${LIST} ${SOURCE}) + + # Check the length of the stack + list(LENGTH STACK STACK_LENGTH) + endwhile(STACK_LENGTH GREATER 0) + endif (NOT FOUND_${UPPER_VERTEX}) + endforeach(VERTEX) + + set(${LIST} ${${LIST}} PARENT_SCOPE) +endfunction(topological_sort) + +# Small little hack that tweaks a component name (as used for CPack) +# to make sure to avoid certain names that cause problems. Sets the +# variable named varname to the "sanitized" name. +# +# FIXME: This is a complete hack. We probably need to fix the CPack +# generators (NSIS in particular) to get rid of the need for this. +macro(fix_cpack_component_name varname name) + if (${name} STREQUAL "foreach") + set(${varname} "boost_foreach") + else() + set(${varname} ${name}) + endif() +endmacro() + + +# +# A big shout out to the cmake gurus @ compiz +# + +function (colormsg) + string (ASCII 27 _escape) + set(WHITE "29") + set(GRAY "30") + set(RED "31") + set(GREEN "32") + set(YELLOW "33") + set(BLUE "34") + set(MAG "35") + set(CYAN "36") + + foreach (color WHITE GRAY RED GREEN YELLOW BLUE MAG CYAN) + set(HI${color} "1\;${${color}}") + set(LO${color} "2\;${${color}}") + set(_${color}_ "4\;${${color}}") + set(_HI${color}_ "1\;4\;${${color}}") + set(_LO${color}_ "2\;4\;${${color}}") + endforeach() + + set(str "") + set(coloron FALSE) + foreach(arg ${ARGV}) + if (NOT ${${arg}} STREQUAL "") + if (CMAKE_COLOR_MAKEFILE) + set(str "${str}${_escape}[${${arg}}m") + set(coloron TRUE) + endif() + else() + set(str "${str}${arg}") + if (coloron) + set(str "${str}${_escape}[0m") + set(coloron FALSE) + endif() + set(str "${str} ") + endif() + endforeach() + message(STATUS ${str}) +endfunction() + +# colormsg("Colors:" +# WHITE "white" GRAY "gray" GREEN "green" +# RED "red" YELLOW "yellow" BLUE "blue" MAG "mag" CYAN "cyan" +# _WHITE_ "white" _GRAY_ "gray" _GREEN_ "green" +# _RED_ "red" _YELLOW_ "yellow" _BLUE_ "blue" _MAG_ "mag" _CYAN_ "cyan" +# _HIWHITE_ "white" _HIGRAY_ "gray" _HIGREEN_ "green" +# _HIRED_ "red" _HIYELLOW_ "yellow" _HIBLUE_ "blue" _HIMAG_ "mag" _HICYAN_ "cyan" +# HIWHITE "white" HIGRAY "gray" HIGREEN "green" +# HIRED "red" HIYELLOW "yellow" HIBLUE "blue" HIMAG "mag" HICYAN "cyan" +# "right?") + +# +# pretty-prints the value of a variable so that the +# equals signs align +# + +function(boost_report_value NAME) + string(LENGTH "${NAME}" varlen) + # LOG + #message(STATUS "boost_report_value: NAME=${NAME} (${varlen})") + #message(STATUS "boost_report_value: \${NAME}=${${NAME}}") + math(EXPR padding_len 40-${varlen}) + string(SUBSTRING " " + 0 ${padding_len} varpadding) + colormsg("${NAME}${varpadding} = ${${NAME}}") +endfunction() + +function(trace NAME) + if(BOOST_CMAKE_TRACE) + string(LENGTH "${NAME}" varlen) + math(EXPR padding_len 40-${varlen}) + string(SUBSTRING "........................................" + 0 ${padding_len} varpadding) + message("${NAME} ${varpadding} ${${NAME}}") + endif() +endfunction() + +# +# pretty-prints the value of a variable so that the +# equals signs align +# +function(boost_report_pretty PRETTYNAME VARNAME) + string(LENGTH "${PRETTYNAME}" varlen) + math(EXPR padding_len 30-${varlen}) + string(SUBSTRING " " + 0 ${padding_len} varpadding) + message(STATUS "${PRETTYNAME}${varpadding} = ${${VARNAME}}") +endfunction() + +# +# assert that ARG is actually a library target +# + +macro(dependency_check ARG) + trace(ARG) + if (NOT "${ARG}" STREQUAL "") + get_target_property(deptype ${ARG} TYPE) + if(NOT deptype MATCHES ".*_LIBRARY$") + set(DEPENDENCY_OKAY FALSE) + list(APPEND DEPENDENCY_FAILURES ${ARG}) + endif() + endif() +endmacro() + + + +# +# Pretty-print of given property of current directory. +# +macro(proj_report_directory_property PROPNAME) + get_directory_property(${PROPNAME} ${PROPNAME}) + boost_report_value(${PROPNAME}) +endmacro() + +# +# Scans the current directory and returns a list of subdirectories. +# Author: Robert Fleming +# Source: http://www.cmake.org/pipermail/cmake/2008-February/020114.html +# +# Third parameter is 1 if you want relative paths returned. +# Usage: list_subdirectories(the_list_is_returned_here /path/to/project TRUE) +# + +macro(list_subdirectories retval curdir return_relative) + file(GLOB sub-dir RELATIVE ${curdir} *) + set(list_of_dirs "") + foreach(dir ${sub-dir}) + if(IS_DIRECTORY ${curdir}/${dir}) + if (${return_relative}) + set(list_of_dirs ${list_of_dirs} ${dir}) + else() + set(list_of_dirs ${list_of_dirs} ${curdir}/${dir}) + endif() + endif() + endforeach() + set(${retval} ${list_of_dirs}) +endmacro() + +# +# Generates output name for given target depending on platform and version. +# For instance, on Windows, libraries get ABI version suffix soci_coreXY.{dll|lib}. +# + +function(proj_target_output_name TARGET_NAME OUTPUT_NAME) + if(NOT DEFINED TARGET_NAME) + message(SEND_ERROR "Error, the variable TARGET_NAME is not defined!") + endif() + + if(NOT DEFINED ${PROJECT_INTERN_NAME}_VERSION) + message(SEND_ERROR "Error, the variable ${${PROJECT_INTERN_NAME}_VERSION} is not defined!") + endif() + + # On Windows, ABI version is specified using binary file name suffix. + # On Unix, suffix is empty and SOVERSION is used instead. + if (WIN32) + string(LENGTH "${${PROJECT_INTERN_NAME}_ABI_VERSION}" abilen) + if(abilen GREATER 0) + set(SUFFIX "_${${PROJECT_INTERN_NAME}_ABI_VERSION}") + endif() + endif() + + set(${OUTPUT_NAME} ${TARGET_NAME}${SUFFIX} PARENT_SCOPE) +endfunction() + + +# +# conversion from lla name to lla convert name ( without lla extension) +# + +function(proj_lla_output_name LLA_INPUT_NAME LLA_OUTPUT_NAME ) + get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE) + get_filename_component(pathname ${LLA_INPUT_NAME} PATH) + set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE) + set(${LLA_OUTPUT_NAME} ${pathname}/${filename} PARENT_SCOPE) +endfunction() + +function(proj_lla_target_name LLA_INPUT_NAME LLA_TARGET ) + get_filename_component(filename ${LLA_INPUT_NAME} NAME_WE) + set(${LLA_TARGET} ${filename} PARENT_SCOPE) +endfunction() + +# +# in place conversion of lla file to gsb +# + +function(proj_convert_grid_lla2gsb GRID_DIRECTORY) + set(NAD2BIN_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + set(NAD2BIN_PATH ${NAD2BIN_DIR}/nad2bin${CMAKE_EXECUTABLE_SUFFIX}) + file(TO_NATIVE_PATH ${NAD2BIN_PATH} NAD2BIN_EXE) + file(GLOB LLA_FILES ${${GRID_DIRECTORY}}/*.lla) + foreach(LLA ${LLA_FILES} ) + proj_lla_output_name(${LLA} DEST_FILE) + file(TO_NATIVE_PATH ${DEST_FILE} DEST) + proj_lla_target_name(${LLA} LLA_TARGET) + if(NOT EXISTS ${DEST}) + add_custom_target( ${LLA_TARGET} ALL + COMMAND ${NAD2BIN_EXE} ${DEST} "<" ${LLA} + DEPENDS nad2bin ) + endif(NOT EXISTS ${DEST}) + endforeach(LLA) +endfunction() + +# +# add lla output list to an existing file list +# + +function(proj_append_lla_output_file LLA_INPUT_FILE FILE_LIST) + set(LIST_OUT ${${FILE_LIST}}) + foreach(LLA ${${LLA_INPUT_FILE}} ) + proj_lla_output_name(${LLA} DEST_FILE) + file(TO_NATIVE_PATH ${DEST_FILE} DEST) + set(LIST_OUT ${LIST_OUT} ${DEST_FILE} ) + endforeach(LLA ${LLA_INPUT_FILE}) + set(${FILE_LIST} ${LIST_OUT} PARENT_SCOPE) +endfunction() + diff --git a/proj4/cmake/Proj4Version.cmake b/proj4/cmake/Proj4Version.cmake new file mode 100644 index 000000000000..fafaf24ddc61 --- /dev/null +++ b/proj4/cmake/Proj4Version.cmake @@ -0,0 +1,47 @@ +################################################################################ +# Proj4Version.cmake - part of CMake configuration of Proj4 library +################################################################################ +# Copyright (C) 2010 Mateusz Loskot +# +# Distributed under the Boost Software License, Version 1.0 +################################################################################ +# Macros in this module: +# +# proj_version - defines version information for PROJ library +# (best known as PROJ4 because MAJOR version is 4 since a very long time) +################################################################################ + +# Defines version information for PROJ library +# +# proj_version(MAJOR major_version MINOR minor_version PATCH patch_level) +# +# MAJOR.MINOR version is used to set SOVERSION +# + +macro(proj_version) + parse_arguments(THIS_VERSION "MAJOR;MINOR;PATCH;" + "" + ${ARGN}) + + # Set version components + set(${PROJECT_INTERN_NAME}_VERSION_MAJOR ${THIS_VERSION_MAJOR}) + set(${PROJECT_INTERN_NAME}_VERSION_MINOR ${THIS_VERSION_MINOR}) + set(${PROJECT_INTERN_NAME}_VERSION_PATCH ${THIS_VERSION_PATCH}) + + # Set VERSION string + set(${PROJECT_INTERN_NAME}_VERSION + "${${PROJECT_INTERN_NAME}_VERSION_MAJOR}.${${PROJECT_INTERN_NAME}_VERSION_MINOR}.${${PROJECT_INTERN_NAME}_VERSION_PATCH}") + + # Set ABI version string used to name binary output + # On Windows, ABI version is specified using binary file name suffix. + if(WIN32) + set(${PROJECT_INTERN_NAME}_ABI_VERSION + "${${PROJECT_INTERN_NAME}_VERSION_MAJOR}_${${PROJECT_INTERN_NAME}_VERSION_MINOR}") + endif() + + message(STATUS "") + boost_report_value(${PROJECT_INTERN_NAME}_VERSION) + if(WIN32) + boost_report_value(${PROJECT_INTERN_NAME}_ABI_VERSION) + endif(WIN32) +endmacro() diff --git a/proj4/cmake/policies.cmake b/proj4/cmake/policies.cmake new file mode 100644 index 000000000000..c16fbc1259a3 --- /dev/null +++ b/proj4/cmake/policies.cmake @@ -0,0 +1,5 @@ +if (CMAKE_MAJOR_VERSION GREATER 2) + cmake_policy(SET CMP0022 OLD) # interface link libraries + cmake_policy(SET CMP0042 NEW) # osx rpath + cmake_policy(SET CMP0011 NEW) # policy setting +endif() diff --git a/proj4/cmake/proj_config.cmake.in b/proj4/cmake/proj_config.cmake.in new file mode 100644 index 000000000000..bbdf32494a85 --- /dev/null +++ b/proj4/cmake/proj_config.cmake.in @@ -0,0 +1,65 @@ +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_JNI_H 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#cmakedefine HAVE_LIBM 1 + +/* Define to 1 if you have localeconv */ +#cmakedefine HAVE_LOCALECONV 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Enabled for Java/JNI Support */ +#cmakedefine JNI_ENABLED 1 + +/* Name of package */ +#cmakedefine PACKAGE "${PACKAGE}" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "${PACKAGE_BUGREPORT}" + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "${PACKAGE_NAME}" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "${PACKAGE_STRING}" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "${PACKAGE_TARNAME}" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "${PACKAGE_VERSION}" + +/* Define to 1 if you have the ANSI C header files. */ +#cmakedefine STDC_HEADERS 1 + +/* Version number of package */ +#cmakedefine VERSION "${VERSION}" diff --git a/proj4/cmake/project-config-version.cmake.in b/proj4/cmake/project-config-version.cmake.in new file mode 100644 index 000000000000..ce2820cb868c --- /dev/null +++ b/proj4/cmake/project-config-version.cmake.in @@ -0,0 +1,48 @@ +# Version checking for @PROJECT_NAME@ + +set (PACKAGE_VERSION "@PROJ_VERSION@") +set (PACKAGE_VERSION_MAJOR "@PROJ_VERSION_MAJOR@") +set (PACKAGE_VERSION_MINOR "@PROJ_VERSION_MINOR@") +set (PACKAGE_VERSION_PATCH "@PROJ_VERSION_PATCH@") + +if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_NAME@") + # Check package name (in particular, because of the way cmake finds + # package config files, the capitalization could easily be "wrong"). + # This is necessary to ensure that the automatically generated + # variables, e.g., _FOUND, are consistently spelled. + set (REASON "package = @PROJECT_NAME@, NOT ${PACKAGE_FIND_NAME}") + set (PACKAGE_VERSION_UNSUITABLE TRUE) +elseif (NOT (APPLE OR (NOT DEFINED CMAKE_SIZEOF_VOID_P) OR + CMAKE_SIZEOF_VOID_P EQUAL @CMAKE_SIZEOF_VOID_P@)) + # Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple + # since a multi-architecture library is built for that platform). + set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@") + set (PACKAGE_VERSION_UNSUITABLE TRUE) +elseif (MSVC AND NOT MSVC_VERSION STREQUAL "@MSVC_VERSION@") + # Reject if there's a mismatch in MSVC compiler versions + set (REASON "_MSC_VER = @MSVC_VERSION@") + set (PACKAGE_VERSION_UNSUITABLE TRUE) +elseif (NOT CMAKE_CROSSCOMPILING STREQUAL "@CMAKE_CROSSCOMPILING@") + # Reject if there's a mismatch in ${CMAKE_CROSSCOMPILING} + set (REASON "cross-compiling = @CMAKE_CROSSCOMPILING@") + set (PACKAGE_VERSION_UNSUITABLE TRUE) +elseif (CMAKE_CROSSCOMPILING AND + NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND + CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@")) + # Reject if cross-compiling and there's a mismatch in the target system + set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@") + set (PACKAGE_VERSION_UNSUITABLE TRUE) +elseif (PACKAGE_FIND_VERSION) + if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set (PACKAGE_VERSION_EXACT TRUE) + elseif (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION + AND PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR) + set (PACKAGE_VERSION_COMPATIBLE TRUE) + endif () +endif () + +# If unsuitable, append the reason to the package version so that it's +# visible to the user. +if (PACKAGE_VERSION_UNSUITABLE) + set (PACKAGE_VERSION "${PACKAGE_VERSION} (${REASON})") +endif () diff --git a/proj4/cmake/project-config.cmake.in b/proj4/cmake/project-config.cmake.in new file mode 100644 index 000000000000..9a52b3b5d6ae --- /dev/null +++ b/proj4/cmake/project-config.cmake.in @@ -0,0 +1,31 @@ +# Configure @PROJECT_NAME@ +# +# Set +# @PROJECT_NAME@_FOUND = 1 +# @PROJECT_NAME@_INCLUDE_DIRS = /usr/local/include +# @PROJECT_NAME@_LIBRARIES = proj +# @PROJECT_NAME@_LIBRARY_DIRS = /usr/local/lib +# @PROJECT_NAME@_BINARY_DIRS = /usr/local/bin +# @PROJECT_NAME@_VERSION = 4.9.1 (for example) + +message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}") +# @PROJECT_NAME@_VERSION is set by version file +message (STATUS + "@PROJECT_NAME@ configuration, version ${@PROJECT_NAME@_VERSION}") + +# Tell the user project where to find our headers and libraries +get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) +get_filename_component (_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE) +set (@PROJECT_NAME@_INCLUDE_DIRS "${_ROOT}/@INCLUDEDIR@") +set (@PROJECT_NAME@_LIBRARY_DIRS "${_ROOT}/@LIBDIR@") +set (@PROJECT_NAME@_BINARY_DIRS "${_ROOT}/@BINDIR@") + +set (@PROJECT_NAME@_LIBRARIES proj) +# Read in the exported definition of the library +include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake") + +unset (_ROOT) +unset (_DIR) + +# For backward compatibility with old releases of libgeotiff +set (@PROJECT_NAME@_INCLUDE_DIR ${@PROJECT_NAME@_INCLUDE_DIRS}) diff --git a/proj4/com/COMTest1.aps b/proj4/com/COMTest1.aps new file mode 100644 index 000000000000..e1c63e9d4f31 Binary files /dev/null and b/proj4/com/COMTest1.aps differ diff --git a/proj4/com/COMTest1.cpp b/proj4/com/COMTest1.cpp new file mode 100644 index 000000000000..4939b8b40e37 --- /dev/null +++ b/proj4/com/COMTest1.cpp @@ -0,0 +1,72 @@ +// COMTest1.cpp : Implementation of DLL Exports. + + +// Note: Proxy/Stub Information +// To build a separate proxy/stub DLL, +// run nmake -f COMTest1ps.mk in the project directory. + +#include "stdafx.h" +#include "resource.h" +#include +#include "COMTest1.h" + +#include "COMTest1_i.c" +#include "ProjDef.h" + + +CComModule _Module; + +BEGIN_OBJECT_MAP(ObjectMap) +OBJECT_ENTRY(CLSID_ProjDef, CProjDef) +END_OBJECT_MAP() + +///////////////////////////////////////////////////////////////////////////// +// DLL Entry Point + +extern "C" +BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) +{ + if (dwReason == DLL_PROCESS_ATTACH) + { + _Module.Init(ObjectMap, hInstance, &LIBID_PROJ4Lib); + DisableThreadLibraryCalls(hInstance); + } + else if (dwReason == DLL_PROCESS_DETACH) + _Module.Term(); + return TRUE; // ok +} + +///////////////////////////////////////////////////////////////////////////// +// Used to determine whether the DLL can be unloaded by OLE + +STDAPI DllCanUnloadNow(void) +{ + return (_Module.GetLockCount()==0) ? S_OK : S_FALSE; +} + +///////////////////////////////////////////////////////////////////////////// +// Returns a class factory to create an object of the requested type + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) +{ + return _Module.GetClassObject(rclsid, riid, ppv); +} + +///////////////////////////////////////////////////////////////////////////// +// DllRegisterServer - Adds entries to the system registry + +STDAPI DllRegisterServer(void) +{ + // registers object, typelib and all interfaces in typelib + return _Module.RegisterServer(TRUE); +} + +///////////////////////////////////////////////////////////////////////////// +// DllUnregisterServer - Removes entries from the system registry + +STDAPI DllUnregisterServer(void) +{ + return _Module.UnregisterServer(TRUE); +} + + diff --git a/proj4/com/COMTest1.def b/proj4/com/COMTest1.def new file mode 100644 index 000000000000..a14e3f8b0703 --- /dev/null +++ b/proj4/com/COMTest1.def @@ -0,0 +1,9 @@ +; COMTest1.def : Declares the module parameters. + +LIBRARY "PROJ4COM.DLL" + +EXPORTS + DllCanUnloadNow @1 PRIVATE + DllGetClassObject @2 PRIVATE + DllRegisterServer @3 PRIVATE + DllUnregisterServer @4 PRIVATE diff --git a/proj4/com/COMTest1.dsp b/proj4/com/COMTest1.dsp new file mode 100644 index 000000000000..5a2115db9f67 --- /dev/null +++ b/proj4/com/COMTest1.dsp @@ -0,0 +1,350 @@ +# Microsoft Developer Studio Project File - Name="COMTest1" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=COMTest1 - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "COMTest1.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "COMTest1.mak" CFG="COMTest1 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "COMTest1 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "COMTest1 - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "COMTest1 - Win32 Release MinSize" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "COMTest1 - Win32 Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "COMTest1 - Win32 Unicode Release MinSize" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "COMTest1 - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "COMTest1 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "C:\warmerda\proj\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib C:\warmerda\proj\src\proj_i.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/PROJ4COM.dll" /pdbtype:sept +# Begin Custom Build - Performing registration +OutDir=.\Debug +TargetPath=.\Debug\PROJ4COM.dll +InputPath=.\Debug\PROJ4COM.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "DebugU" +# PROP BASE Intermediate_Dir "DebugU" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "DebugU" +# PROP Intermediate_Dir "DebugU" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# Begin Custom Build - Performing registration +OutDir=.\DebugU +TargetPath=.\DebugU\COMTest1.dll +InputPath=.\DebugU\COMTest1.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + if "%OS%"=="" goto NOTNT + if not "%OS%"=="Windows_NT" goto NOTNT + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + goto end + :NOTNT + echo Warning : Cannot register Unicode DLL on Windows 95 + :end + +# End Custom Build + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinSize" +# PROP BASE Intermediate_Dir "ReleaseMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinSize" +# PROP Intermediate_Dir "ReleaseMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseMinSize +TargetPath=.\ReleaseMinSize\COMTest1.dll +InputPath=.\ReleaseMinSize\COMTest1.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinDependency" +# PROP BASE Intermediate_Dir "ReleaseMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinDependency" +# PROP Intermediate_Dir "ReleaseMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseMinDependency +TargetPath=.\ReleaseMinDependency\COMTest1.dll +InputPath=.\ReleaseMinDependency\COMTest1.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + +# End Custom Build + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinSize" +# PROP BASE Intermediate_Dir "ReleaseUMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinSize" +# PROP Intermediate_Dir "ReleaseUMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseUMinSize +TargetPath=.\ReleaseUMinSize\COMTest1.dll +InputPath=.\ReleaseUMinSize\COMTest1.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + if "%OS%"=="" goto NOTNT + if not "%OS%"=="Windows_NT" goto NOTNT + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + goto end + :NOTNT + echo Warning : Cannot register Unicode DLL on Windows 95 + :end + +# End Custom Build + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinDependency" +# PROP BASE Intermediate_Dir "ReleaseUMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinDependency" +# PROP Intermediate_Dir "ReleaseUMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseUMinDependency +TargetPath=.\ReleaseUMinDependency\COMTest1.dll +InputPath=.\ReleaseUMinDependency\COMTest1.dll +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + if "%OS%"=="" goto NOTNT + if not "%OS%"=="Windows_NT" goto NOTNT + regsvr32 /s /c "$(TargetPath)" + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + goto end + :NOTNT + echo Warning : Cannot register Unicode DLL on Windows 95 + :end + +# End Custom Build + +!ENDIF + +# Begin Target + +# Name "COMTest1 - Win32 Debug" +# Name "COMTest1 - Win32 Unicode Debug" +# Name "COMTest1 - Win32 Release MinSize" +# Name "COMTest1 - Win32 Release MinDependency" +# Name "COMTest1 - Win32 Unicode Release MinSize" +# Name "COMTest1 - Win32 Unicode Release MinDependency" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\COMTest1.cpp +# End Source File +# Begin Source File + +SOURCE=.\COMTest1.def +# End Source File +# Begin Source File + +SOURCE=.\COMTest1.idl + +!IF "$(CFG)" == "COMTest1 - Win32 Debug" + +# ADD MTL /tlb ".\PROJ4COM.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Debug" + +# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinSize" + +# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Release MinDependency" + +# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinSize" + +# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf + +!ELSEIF "$(CFG)" == "COMTest1 - Win32 Unicode Release MinDependency" + +# ADD MTL /tlb ".\COMTest1.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\COMTest1.rc +# End Source File +# Begin Source File + +SOURCE=.\ProjDef.cpp +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.cpp +# ADD CPP /Yc"stdafx.h" +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\ProjDef.h +# End Source File +# Begin Source File + +SOURCE=.\Resource.h +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\ProjDef.rgs +# End Source File +# End Group +# End Target +# End Project diff --git a/proj4/com/COMTest1.dsw b/proj4/com/COMTest1.dsw new file mode 100644 index 000000000000..9a011802c333 --- /dev/null +++ b/proj4/com/COMTest1.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "COMTest1"=.\COMTest1.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/proj4/com/COMTest1.idl b/proj4/com/COMTest1.idl new file mode 100644 index 000000000000..ed5bc023a0a1 --- /dev/null +++ b/proj4/com/COMTest1.idl @@ -0,0 +1,44 @@ +// COMTest1.idl : IDL source for COMTest1.dll +// + +// This file will be processed by the MIDL tool to +// produce the type library (COMTest1.tlb) and marshalling code. + +import "oaidl.idl"; +import "ocidl.idl"; + [ + object, + uuid(28849AA6-E8FB-4077-8D7A-D83CDFC2DC44), + dual, + helpstring("IProjDef Interface"), + pointer_default(unique) + ] + interface IProjDef : IDispatch + { + [id(1), helpstring("method Initialize")] HRESULT Initialize([in] BSTR proj_string, [out, retval] int *success ); + [id(2), helpstring("method TransformPoint3D")] HRESULT TransformPoint3D([in] IUnknown *srcProj, + [in,out] double *x, [in, out] double *y, [in, out] double *z, [out, retval] int *success ); + [id(3), helpstring("method GetHandle")] HRESULT GetHandle([out, retval] long *pHandle ); + [id(4), helpstring("method IsLatLong")] HRESULT IsLatLong([out, retval] int *result); + [id(5), helpstring("method GetLastError")] HRESULT GetLastError([out, retval] BSTR *error ); + }; + +[ + uuid(A0ADE3D8-9A85-4BD3-AD56-BFEF42495130), + version(1.0), + helpstring("PROJ.4") +] +library PROJ4Lib +{ + importlib("stdole32.tlb"); + importlib("stdole2.tlb"); + + [ + uuid(B9B8F0A3-D9F8-4537-9A03-329DC9AE144C), + helpstring("ProjDef Class") + ] + coclass ProjDef + { + [default] interface IProjDef; + }; +}; diff --git a/proj4/com/COMTest1.ncb b/proj4/com/COMTest1.ncb new file mode 100644 index 000000000000..8c766c6f244f Binary files /dev/null and b/proj4/com/COMTest1.ncb differ diff --git a/proj4/com/COMTest1.opt b/proj4/com/COMTest1.opt new file mode 100644 index 000000000000..a494b3df09ca Binary files /dev/null and b/proj4/com/COMTest1.opt differ diff --git a/proj4/com/COMTest1.plg b/proj4/com/COMTest1.plg new file mode 100644 index 000000000000..9a5405204099 --- /dev/null +++ b/proj4/com/COMTest1.plg @@ -0,0 +1,89 @@ + + +
+

Build Log

+

+--------------------Configuration: COMTest1 - Win32 Debug-------------------- +

+

Command Lines

+Creating command line "midl.exe /tlb ".\PROJ4COM.tlb" /h "COMTest1.h" /iid "COMTest1_i.c" /Oicf "C:\warmerda\proj\com\COMTest1.idl"" +Creating command line "rc.exe /l 0x409 /fo"Debug/COMTest1.res" /d "_DEBUG" "C:\warmerda\proj\com\COMTest1.rc"" +Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F4.tmp" with contents +[ +/nologo /MTd /W3 /Gm /ZI /Od /I "C:\warmerda\proj\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/COMTest1.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"C:\warmerda\proj\com\COMTest1.cpp" +"C:\warmerda\proj\com\ProjDef.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F4.tmp" +Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F5.tmp" with contents +[ +/nologo /MTd /W3 /Gm /ZI /Od /I "C:\warmerda\proj\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/COMTest1.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"C:\warmerda\proj\com\StdAfx.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F5.tmp" +Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F6.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib C:\warmerda\proj\src\proj_i.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"Debug/PROJ4COM.pdb" /debug /machine:I386 /def:".\COMTest1.def" /out:"Debug/PROJ4COM.dll" /implib:"Debug/PROJ4COM.lib" /pdbtype:sept +.\Debug\COMTest1.obj +.\Debug\ProjDef.obj +.\Debug\StdAfx.obj +.\Debug\COMTest1.res +] +Creating command line "link.exe @C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F6.tmp" +Creating temporary file "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F7.bat" with contents +[ +@echo off +regsvr32 /s /c ".\Debug\PROJ4COM.dll" +echo regsvr32 exec. time > ".\Debug\regsvr32.trg" +] +Creating command line "C:\DOCUME~1\warmerda\LOCALS~1\Temp\RSP2F7.bat" +Creating Type Library... +Microsoft (R) MIDL Compiler Version 5.01.0164 +Copyright (c) Microsoft Corp 1991-1997. All rights reserved. +Processing C:\warmerda\proj\com\COMTest1.idl +COMTest1.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\oaidl.idl +oaidl.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\objidl.idl +objidl.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\unknwn.idl +unknwn.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\wtypes.idl +wtypes.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\basetsd.h +basetsd.h +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\guiddef.h +guiddef.h +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\ocidl.idl +ocidl.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\oleidl.idl +oleidl.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\servprov.idl +servprov.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\urlmon.idl +urlmon.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\msxml.idl +msxml.idl +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\oaidl.acf +oaidl.acf +Processing C:\PROGRAM FILES\MICROSOFT SDK\INCLUDE\ocidl.acf +ocidl.acf +Compiling resources... +Compiling... +StdAfx.cpp +Compiling... +COMTest1.cpp +ProjDef.cpp +Generating Code... +Linking... + Creating library Debug/PROJ4COM.lib and object Debug/PROJ4COM.exp +

Output Window

+Performing registration + + + +

Results

+PROJ4COM.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/proj4/com/COMTest1.rc b/proj4/com/COMTest1.rc new file mode 100644 index 000000000000..5e554d0fda41 --- /dev/null +++ b/proj4/com/COMTest1.rc @@ -0,0 +1,128 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "1 TYPELIB ""COMTest1.tlb""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "\0" + VALUE "FileDescription", "PROJ.4 COM Module\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "PROJ4\0" + VALUE "LegalCopyright", "Copyright 2005\0" + VALUE "LegalTrademarks", "\0" + VALUE "OLESelfRegister", "\0" + VALUE "OriginalFilename", "PROJ4COM.DLL\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "PROJ.4 COM\0" + VALUE "ProductVersion", "1, 0, 0, 1\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// REGISTRY +// + +IDR_PROJDEF REGISTRY DISCARDABLE "ProjDef.rgs" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_PROJNAME "PROJ4COM" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +1 TYPELIB "PROJ4COM.tlb" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/proj4/com/COMTest1_p.c b/proj4/com/COMTest1_p.c new file mode 100644 index 000000000000..a7ba7777e800 --- /dev/null +++ b/proj4/com/COMTest1_p.c @@ -0,0 +1,571 @@ +/* this ALWAYS GENERATED file contains the proxy stub code */ + + +/* File created by MIDL compiler version 5.01.0164 */ +/* at Tue Oct 18 23:21:00 2005 + */ +/* Compiler settings for C:\warmerda\proj\com\COMTest1.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: allocation ref bounds_check enum stub_data +*/ +//@@MIDL_FILE_HEADING( ) + +#define USE_STUBLESS_PROXY + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REDQ_RPCPROXY_H_VERSION__ +#define __REQUIRED_RPCPROXY_H_VERSION__ 440 +#endif + + +#include "rpcproxy.h" +#ifndef __RPCPROXY_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCPROXY_H_VERSION__ + + +#include "COMTest1.h" + +#define TYPE_FORMAT_STRING_SIZE 81 +#define PROC_FORMAT_STRING_SIZE 171 + +typedef struct _MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } MIDL_TYPE_FORMAT_STRING; + +typedef struct _MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } MIDL_PROC_FORMAT_STRING; + + +extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString; +extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString; + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IDispatch, ver. 0.0, + GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IProjDef, ver. 0.0, + GUID={0x28849AA6,0xE8FB,0x4077,{0x8D,0x7A,0xD8,0x3C,0xDF,0xC2,0xDC,0x44}} */ + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IProjDef_ServerInfo; + +#pragma code_seg(".orpc") +extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[1]; + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + __MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x20000, /* Ndr library version */ + 0, + 0x50100a4, /* MIDL Version 5.1.164 */ + 0, + UserMarshalRoutines, + 0, /* notify & notify_flag routine table */ + 1, /* Flags */ + 0, /* Reserved3 */ + 0, /* Reserved4 */ + 0 /* Reserved5 */ + }; + +static const unsigned short IProjDef_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 0, + 34, + 86, + 114, + 142 + }; + +static const MIDL_SERVER_INFO IProjDef_ServerInfo = + { + &Object_StubDesc, + 0, + __MIDL_ProcFormatString.Format, + &IProjDef_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0 + }; + +static const MIDL_STUBLESS_PROXY_INFO IProjDef_ProxyInfo = + { + &Object_StubDesc, + __MIDL_ProcFormatString.Format, + &IProjDef_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + +CINTERFACE_PROXY_VTABLE(12) _IProjDefProxyVtbl = +{ + &IProjDef_ProxyInfo, + &IID_IProjDef, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* (void *)-1 /* IDispatch::GetTypeInfoCount */ , + 0 /* (void *)-1 /* IDispatch::GetTypeInfo */ , + 0 /* (void *)-1 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *)-1 /* IProjDef::Initialize */ , + (void *)-1 /* IProjDef::TransformPoint3D */ , + (void *)-1 /* IProjDef::GetHandle */ , + (void *)-1 /* IProjDef::IsLatLong */ , + (void *)-1 /* IProjDef::GetLastError */ +}; + + +static const PRPC_STUB_FUNCTION IProjDef_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IProjDefStubVtbl = +{ + &IID_IProjDef, + &IProjDef_ServerInfo, + 12, + &IProjDef_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + +#pragma data_seg(".rdata") + +static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[1] = + { + + { + BSTR_UserSize + ,BSTR_UserMarshal + ,BSTR_UserUnmarshal + ,BSTR_UserFree + } + + }; + + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif + +#if !(TARGET_IS_NT40_OR_LATER) +#error You need a Windows NT 4.0 or later to run this stub because it uses these features: +#error -Oif or -Oicf, [wire_marshal] or [user_marshal] attribute, more than 32 methods in the interface. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will die there with the RPC_X_WRONG_STUB_VERSION error. +#endif + + +static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString = + { + 0, + { + + /* Procedure Initialize */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x7 ), /* 7 */ +#ifndef _ALPHA_ +/* 8 */ NdrFcShort( 0x10 ), /* x86, MIPS, PPC Stack size/offset = 16 */ +#else + NdrFcShort( 0x20 ), /* Alpha Stack size/offset = 32 */ +#endif +/* 10 */ NdrFcShort( 0x0 ), /* 0 */ +/* 12 */ NdrFcShort( 0x10 ), /* 16 */ +/* 14 */ 0x6, /* Oi2 Flags: clt must size, has return, */ + 0x3, /* 3 */ + + /* Parameter proj_string */ + +/* 16 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +#ifndef _ALPHA_ +/* 18 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 20 */ NdrFcShort( 0x1a ), /* Type Offset=26 */ + + /* Parameter success */ + +/* 22 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 24 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 26 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 28 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 30 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 32 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure TransformPoint3D */ + +/* 34 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 36 */ NdrFcLong( 0x0 ), /* 0 */ +/* 40 */ NdrFcShort( 0x8 ), /* 8 */ +#ifndef _ALPHA_ +/* 42 */ NdrFcShort( 0x1c ), /* x86, MIPS, PPC Stack size/offset = 28 */ +#else + NdrFcShort( 0x38 ), /* Alpha Stack size/offset = 56 */ +#endif +/* 44 */ NdrFcShort( 0x30 ), /* 48 */ +/* 46 */ NdrFcShort( 0x40 ), /* 64 */ +/* 48 */ 0x6, /* Oi2 Flags: clt must size, has return, */ + 0x6, /* 6 */ + + /* Parameter srcProj */ + +/* 50 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */ +#ifndef _ALPHA_ +/* 52 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 54 */ NdrFcShort( 0x28 ), /* Type Offset=40 */ + + /* Parameter x */ + +/* 56 */ NdrFcShort( 0x158 ), /* Flags: in, out, base type, simple ref, */ +#ifndef _ALPHA_ +/* 58 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 60 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 62 */ NdrFcShort( 0x158 ), /* Flags: in, out, base type, simple ref, */ +#ifndef _ALPHA_ +/* 64 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 66 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Parameter z */ + +/* 68 */ NdrFcShort( 0x158 ), /* Flags: in, out, base type, simple ref, */ +#ifndef _ALPHA_ +/* 70 */ NdrFcShort( 0x10 ), /* x86, MIPS, PPC Stack size/offset = 16 */ +#else + NdrFcShort( 0x20 ), /* Alpha Stack size/offset = 32 */ +#endif +/* 72 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Parameter success */ + +/* 74 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 76 */ NdrFcShort( 0x14 ), /* x86, MIPS, PPC Stack size/offset = 20 */ +#else + NdrFcShort( 0x28 ), /* Alpha Stack size/offset = 40 */ +#endif +/* 78 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 80 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 82 */ NdrFcShort( 0x18 ), /* x86, MIPS, PPC Stack size/offset = 24 */ +#else + NdrFcShort( 0x30 ), /* Alpha Stack size/offset = 48 */ +#endif +/* 84 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetHandle */ + +/* 86 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 88 */ NdrFcLong( 0x0 ), /* 0 */ +/* 92 */ NdrFcShort( 0x9 ), /* 9 */ +#ifndef _ALPHA_ +/* 94 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 96 */ NdrFcShort( 0x0 ), /* 0 */ +/* 98 */ NdrFcShort( 0x10 ), /* 16 */ +/* 100 */ 0x4, /* Oi2 Flags: has return, */ + 0x2, /* 2 */ + + /* Parameter pHandle */ + +/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 104 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 106 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 110 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure IsLatLong */ + +/* 114 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 116 */ NdrFcLong( 0x0 ), /* 0 */ +/* 120 */ NdrFcShort( 0xa ), /* 10 */ +#ifndef _ALPHA_ +/* 122 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 124 */ NdrFcShort( 0x0 ), /* 0 */ +/* 126 */ NdrFcShort( 0x10 ), /* 16 */ +/* 128 */ 0x4, /* Oi2 Flags: has return, */ + 0x2, /* 2 */ + + /* Parameter result */ + +/* 130 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 132 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 134 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 136 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 138 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 140 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetLastError */ + +/* 142 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 144 */ NdrFcLong( 0x0 ), /* 0 */ +/* 148 */ NdrFcShort( 0xb ), /* 11 */ +#ifndef _ALPHA_ +/* 150 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 152 */ NdrFcShort( 0x0 ), /* 0 */ +/* 154 */ NdrFcShort( 0x8 ), /* 8 */ +/* 156 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter error */ + +/* 158 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 160 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 162 */ NdrFcShort( 0x46 ), /* Type Offset=70 */ + + /* Return value */ + +/* 164 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 166 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 168 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x12, 0x0, /* FC_UP */ +/* 4 */ NdrFcShort( 0xc ), /* Offset= 12 (16) */ +/* 6 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 8 */ NdrFcShort( 0x2 ), /* 2 */ +/* 10 */ 0x9, /* Corr desc: FC_ULONG */ + 0x0, /* */ +/* 12 */ NdrFcShort( 0xfffc ), /* -4 */ +/* 14 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 16 */ + 0x17, /* FC_CSTRUCT */ + 0x3, /* 3 */ +/* 18 */ NdrFcShort( 0x8 ), /* 8 */ +/* 20 */ NdrFcShort( 0xfffffff2 ), /* Offset= -14 (6) */ +/* 22 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 24 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 26 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 28 */ NdrFcShort( 0x0 ), /* 0 */ +/* 30 */ NdrFcShort( 0x4 ), /* 4 */ +/* 32 */ NdrFcShort( 0x0 ), /* 0 */ +/* 34 */ NdrFcShort( 0xffffffe0 ), /* Offset= -32 (2) */ +/* 36 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 38 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 40 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 42 */ NdrFcLong( 0x0 ), /* 0 */ +/* 46 */ NdrFcShort( 0x0 ), /* 0 */ +/* 48 */ NdrFcShort( 0x0 ), /* 0 */ +/* 50 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 52 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 54 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 56 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 58 */ + 0x11, 0x8, /* FC_RP [simple_pointer] */ +/* 60 */ 0xc, /* FC_DOUBLE */ + 0x5c, /* FC_PAD */ +/* 62 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 64 */ NdrFcShort( 0x6 ), /* Offset= 6 (70) */ +/* 66 */ + 0x13, 0x0, /* FC_OP */ +/* 68 */ NdrFcShort( 0xffffffcc ), /* Offset= -52 (16) */ +/* 70 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 72 */ NdrFcShort( 0x0 ), /* 0 */ +/* 74 */ NdrFcShort( 0x4 ), /* 4 */ +/* 76 */ NdrFcShort( 0x0 ), /* 0 */ +/* 78 */ NdrFcShort( 0xfffffff4 ), /* Offset= -12 (66) */ + + 0x0 + } + }; + +const CInterfaceProxyVtbl * _COMTest1_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_IProjDefProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * _COMTest1_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_IProjDefStubVtbl, + 0 +}; + +PCInterfaceName const _COMTest1_InterfaceNamesList[] = +{ + "IProjDef", + 0 +}; + +const IID * _COMTest1_BaseIIDList[] = +{ + &IID_IDispatch, + 0 +}; + + +#define _COMTest1_CHECK_IID(n) IID_GENERIC_CHECK_IID( _COMTest1, pIID, n) + +int __stdcall _COMTest1_IID_Lookup( const IID * pIID, int * pIndex ) +{ + + if(!_COMTest1_CHECK_IID(0)) + { + *pIndex = 0; + return 1; + } + + return 0; +} + +const ExtendedProxyFileInfo COMTest1_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _COMTest1_ProxyVtblList, + (PCInterfaceStubVtblList *) & _COMTest1_StubVtblList, + (const PCInterfaceName * ) & _COMTest1_InterfaceNamesList, + (const IID ** ) & _COMTest1_BaseIIDList, + & _COMTest1_IID_Lookup, + 1, + 2, + 0, /* table of [async_uuid] interfaces */ + 0, /* Filler1 */ + 0, /* Filler2 */ + 0 /* Filler3 */ +}; diff --git a/proj4/com/COMTest1ps.def b/proj4/com/COMTest1ps.def new file mode 100644 index 000000000000..1eb26051218e --- /dev/null +++ b/proj4/com/COMTest1ps.def @@ -0,0 +1,11 @@ + +LIBRARY "COMTest1PS" + +DESCRIPTION 'Proxy/Stub DLL' + +EXPORTS + DllGetClassObject @1 PRIVATE + DllCanUnloadNow @2 PRIVATE + GetProxyDllInfo @3 PRIVATE + DllRegisterServer @4 PRIVATE + DllUnregisterServer @5 PRIVATE diff --git a/proj4/com/COMTest1ps.mk b/proj4/com/COMTest1ps.mk new file mode 100644 index 000000000000..c55034d1bdff --- /dev/null +++ b/proj4/com/COMTest1ps.mk @@ -0,0 +1,16 @@ + +COMTest1ps.dll: dlldata.obj COMTest1_p.obj COMTest1_i.obj + link /dll /out:COMTest1ps.dll /def:COMTest1ps.def /entry:DllMain dlldata.obj COMTest1_p.obj COMTest1_i.obj \ + kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib \ + +.c.obj: + cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL \ + $< + +clean: + @del COMTest1ps.dll + @del COMTest1ps.lib + @del COMTest1ps.exp + @del dlldata.obj + @del COMTest1_p.obj + @del COMTest1_i.obj diff --git a/proj4/com/ProjDef.cpp b/proj4/com/ProjDef.cpp new file mode 100644 index 000000000000..c64a6e192726 --- /dev/null +++ b/proj4/com/ProjDef.cpp @@ -0,0 +1,115 @@ +// ProjDef.cpp : Implementation of CProjDef +#include "stdafx.h" +#include "COMTest1.h" +#include "ProjDef.h" +#include "proj_api.h" + +///////////////////////////////////////////////////////////////////////////// +// CProjDef + + +STDMETHODIMP CProjDef::Initialize(BSTR proj_string, int *success) +{ + USES_CONVERSION; + psProj = pj_init_plus( W2A(proj_string) ); + + if( psProj != NULL ) + *success = 1; + else + { + SetProjError( "pj_init_plus failed." ); + //SetError( (const char *) W2A(proj_string) ); + *success = 0; + } + + return S_OK; +} + +STDMETHODIMP CProjDef::TransformPoint3D(IUnknown *srcProj, double *x, double *y, double *z, int *success) +{ + void *psProjOther; + IProjDef *srcProjReal; + + srcProj->QueryInterface( IID_IProjDef, (void **) &srcProjReal ); + srcProjReal->GetHandle( (long *) &psProjOther ); + + if( psProjOther == NULL || psProj == NULL ) + { + SetError( "One of projections not set." ); + *success = 0; + return E_FAIL; + } + + if( pj_is_latlong( psProjOther ) ) + { + *x *= DEG_TO_RAD; + *y *= DEG_TO_RAD; + } + + *success = pj_transform( psProjOther, psProj, 1, 0, x, y, z ) == 0; + if( ! *success ) + SetProjError( "pj_transform failed." ); + + else if( pj_is_latlong( psProj ) ) + { + *x *= RAD_TO_DEG; + *y *= RAD_TO_DEG; + } + + return S_OK; +} + +STDMETHODIMP CProjDef::GetHandle(long *pHandle) +{ + *pHandle = (long) psProj; + + return S_OK; +} + +STDMETHODIMP CProjDef::IsLatLong(int *result) +{ + if( psProj != NULL ) + { + *result = pj_is_latlong( (projPJ) psProj ); + return S_OK; + } + else + { + SetError( "Projection is null" ); + return E_FAIL; + } +} + +STDMETHODIMP CProjDef::GetLastError( BSTR *error ) +{ + *error = SysAllocString( sLastError ); + + return S_OK; +} + +void CProjDef::SetError( const char *pszMessage ) + +{ + USES_CONVERSION; + + if( sLastError != NULL ) + { + SysFreeString( sLastError ); + sLastError = NULL; + } + + sLastError = SysAllocString( A2BSTR( pszMessage ) ); +} + +void CProjDef::SetProjError( const char *pszMessage ) + +{ + int *pj_errno = pj_get_errno_ref(); + + if( *pj_errno > 0 ) + SetError( strerror( *pj_errno ) ); + else if( *pj_errno < 0 ) + SetError( pj_strerrno( *pj_errno ) ); + else + SetError( pszMessage ); +} diff --git a/proj4/com/ProjDef.h b/proj4/com/ProjDef.h new file mode 100644 index 000000000000..017bf48fa152 --- /dev/null +++ b/proj4/com/ProjDef.h @@ -0,0 +1,49 @@ +// ProjDef.h : Declaration of the CProjDef + +#ifndef __PROJDEF_H_ +#define __PROJDEF_H_ + +#include "resource.h" // main symbols + +///////////////////////////////////////////////////////////////////////////// +// CProjDef +class ATL_NO_VTABLE CProjDef : + public CComObjectRootEx, + public CComCoClass, + public IDispatchImpl +{ +public: + CProjDef() + { + psProj = NULL; + sLastError = NULL; + SetError(""); + } + +DECLARE_REGISTRY_RESOURCEID(IDR_PROJDEF) + +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CProjDef) + COM_INTERFACE_ENTRY(IProjDef) + COM_INTERFACE_ENTRY(IDispatch) +END_COM_MAP() + +// IProjDef +public: + STDMETHOD(GetLastError)( BSTR *error ); + STDMETHOD(IsLatLong)(/*[out]*/ int *result); + STDMETHOD(GetHandle)(long *pHandle); + STDMETHOD(TransformPoint3D)(IUnknown *srcProj, double *x, double *y, double *z, int *success); + STDMETHOD(Initialize)(BSTR proj_string, int *success); + +private: + void SetError( const char *pszMessage ); + void SetProjError( const char *pszMessage ); + + BSTR sLastError; + void *psProj; + +}; + +#endif //__PROJDEF_H_ diff --git a/proj4/com/ProjDef.rgs b/proj4/com/ProjDef.rgs new file mode 100644 index 000000000000..76d519e3ef62 --- /dev/null +++ b/proj4/com/ProjDef.rgs @@ -0,0 +1,26 @@ +HKCR +{ + COMTest1.ProjDef.1 = s 'ProjDef Class' + { + CLSID = s '{B9B8F0A3-D9F8-4537-9A03-329DC9AE144C}' + } + COMTest1.ProjDef = s 'ProjDef Class' + { + CLSID = s '{B9B8F0A3-D9F8-4537-9A03-329DC9AE144C}' + CurVer = s 'PROJ4.ProjDef.1' + } + NoRemove CLSID + { + ForceRemove {B9B8F0A3-D9F8-4537-9A03-329DC9AE144C} = s 'ProjDef Class' + { + ProgID = s 'PROJ4.ProjDef.1' + VersionIndependentProgID = s 'PROJ4.ProjDef' + ForceRemove 'Programmable' + InprocServer32 = s '%MODULE%' + { + val ThreadingModel = s 'Both' + } + 'TypeLib' = s '{A0ADE3D8-9A85-4BD3-AD56-BFEF42495130}' + } + } +} diff --git a/proj4/com/README.TXT b/proj4/com/README.TXT new file mode 100644 index 000000000000..08ca7cb7dbe5 --- /dev/null +++ b/proj4/com/README.TXT @@ -0,0 +1,41 @@ + PROJ.4 COM Interface + ==================== + +This directory contains a Visual Studio 6 project to build +a COM object with a partial interface to PROJ.4. + +Once built, you should be able to: + + regsvr32 debug\proj4com.dll + +Then in VB6: + + o Add the type library as a resource and enable it. + + o Setup code like the following: + +Private Sub Command1_Click() + Dim pUTM As PROJ4Lib.IProjDef + Dim pLL As PROJ4Lib.IProjDef + + Set pUTM = New PROJ4Lib.ProjDef + Set pLL = New PROJ4Lib.ProjDef + + pUTM.Initialize ("+proj=utm +zone=11 +datum=WGS84") + pLL.Initialize ("+proj=latlong +datum=WGS84") + + Dim X As Double, Y As Double, Z As Double + + X = 25000 + Y = 3000000 + Z = 0 + + MsgBox X & " " & Y + + If pLL.TransformPoint3D(pUTM, X, Y, Z) = 0 Then + MsgBox "TransformPoint3D " & pLL.GetLastError() + End If + + MsgBox X & " " & Y + +End Sub \ No newline at end of file diff --git a/proj4/com/StdAfx.cpp b/proj4/com/StdAfx.cpp new file mode 100644 index 000000000000..a5eea178f78b --- /dev/null +++ b/proj4/com/StdAfx.cpp @@ -0,0 +1,12 @@ +// stdafx.cpp : source file that includes just the standard includes +// stdafx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +#ifdef _ATL_STATIC_REGISTRY +#include +#include +#endif + +#include diff --git a/proj4/com/StdAfx.h b/proj4/com/StdAfx.h new file mode 100644 index 000000000000..6661a1450377 --- /dev/null +++ b/proj4/com/StdAfx.h @@ -0,0 +1,27 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#if !defined(AFX_STDAFX_H__760250DA_0BD5_40FD_AC2A_6DDA09FFA21E__INCLUDED_) +#define AFX_STDAFX_H__760250DA_0BD5_40FD_AC2A_6DDA09FFA21E__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#define STRICT +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0400 +#endif +#define _ATL_APARTMENT_THREADED + +#include +//You may derive a class from CComModule and use it if you want to override +//something, but do not change the name of _Module +extern CComModule _Module; +#include + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__760250DA_0BD5_40FD_AC2A_6DDA09FFA21E__INCLUDED) diff --git a/proj4/com/VB6Test.frm b/proj4/com/VB6Test.frm new file mode 100644 index 000000000000..9fd7ce07fc28 --- /dev/null +++ b/proj4/com/VB6Test.frm @@ -0,0 +1,50 @@ +VERSION 5.00 +Begin VB.Form Form1 + Caption = "Form1" + ClientHeight = 3090 + ClientLeft = 60 + ClientTop = 450 + ClientWidth = 4680 + LinkTopic = "Form1" + ScaleHeight = 3090 + ScaleWidth = 4680 + StartUpPosition = 3 'Windows Default + Begin VB.CommandButton Command1 + Caption = "Command1" + Height = 615 + Left = 1680 + TabIndex = 0 + Top = 2160 + Width = 975 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Private Sub Command1_Click() + Dim pUTM As PROJ4Lib.IProjDef + Dim pLL As PROJ4Lib.IProjDef + + Set pUTM = New PROJ4Lib.ProjDef + Set pLL = New PROJ4Lib.ProjDef + + pUTM.Initialize ("+proj=utm +zone=11 +datum=WGS84") + pLL.Initialize ("+proj=latlong +datum=WGS84") + + Dim X As Double, Y As Double, Z As Double + + X = 25000 + Y = 3000000 + Z = 0 + + MsgBox X & " " & Y + + If pLL.TransformPoint3D(pUTM, X, Y, Z) = 0 Then + MsgBox "TransformPoint3D " & pLL.GetLastError() + End If + + MsgBox X & " " & Y + +End Sub diff --git a/proj4/com/dlldata.c b/proj4/com/dlldata.c new file mode 100644 index 000000000000..94bcbfc016a9 --- /dev/null +++ b/proj4/com/dlldata.c @@ -0,0 +1,38 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + +#define PROXY_DELEGATION + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( COMTest1 ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( COMTest1 ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */ diff --git a/proj4/com/resource.h b/proj4/com/resource.h new file mode 100644 index 000000000000..2c9c2c5e5a65 --- /dev/null +++ b/proj4/com/resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by COMTest1.rc +// +#define IDS_PROJNAME 100 +#define IDR_PROJDEF 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 201 +#define _APS_NEXT_COMMAND_VALUE 32768 +#define _APS_NEXT_CONTROL_VALUE 201 +#define _APS_NEXT_SYMED_VALUE 102 +#endif +#endif diff --git a/proj4/configure.ac b/proj4/configure.ac new file mode 100644 index 000000000000..7c77490e1a27 --- /dev/null +++ b/proj4/configure.ac @@ -0,0 +1,123 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) +AC_INIT([PROJ.4 Projections], 4.9.3, [warmerdam@pobox.com], proj) +AC_CONFIG_MACRO_DIR([m4]) +AC_LANG(C) + +AC_CONFIG_AUX_DIR([.]) +AM_INIT_AUTOMAKE +AM_CONFIG_HEADER(src/proj_config.h) + +dnl Enable as much warnings as possible +AX_CFLAGS_WARN_ALL(C_WFLAGS) +AC_SUBST(C_WFLAGS,$C_WFLAGS) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AM_PROG_LIBTOOL + +dnl Checks for libraries. +AC_CHECK_LIB(m,exp,,,) + +dnl We check for headers +AC_HEADER_STDC + +AC_CHECK_FUNC(localeconv, [AC_DEFINE(HAVE_LOCALECONV,1,[Define to 1 if you have localeconv])]) + +dnl --------------------------------------------------------------------------- +dnl Check for JNI support. +dnl --------------------------------------------------------------------------- + +JNI_INCLUDE= +export JNI_INCLUDE + +AC_ARG_WITH(jni, + [AS_HELP_STRING([--with-jni=dir], + [Include Java/JNI support, add optional include dir]) + ],,) + +if test "$with_jni" = "yes" ; then + + AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support]) + + AC_MSG_CHECKING(whether to enable Java/JNI support) + + AC_MSG_RESULT([enabled]) + +elif test "$with_jni" != "no" -a "$with_jni" != "" ; then + + AC_MSG_CHECKING(whether to enable Java/JNI support) + + if test \! -r "$with_jni/jni.h" ; then + AC_MSG_ERROR(Did not find $with_jni/jni.h) + fi + + AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support]) + + AC_MSG_RESULT([enabled]) + + JNI_INCLUDE="-I$with_jni" + +elif test "$with_jni" = "" ; then + AC_CHECK_HEADERS(jni.h) + + AC_MSG_CHECKING(whether to enable Java/JNI support) + + if test "$ac_cv_header_jni_h" = "no" ; then + AC_MSG_RESULT([disabled]) + else + AC_MSG_RESULT([enabled]) + AC_DEFINE(JNI_ENABLED,1,[Enabled for Java/JNI Support]) + fi + +else + AC_MSG_CHECKING(whether to enable Java/JNI support) + + AC_MSG_RESULT([disabled]) +fi + +AC_SUBST(JNI_INCLUDE,$JNI_INCLUDE) + +dnl --------------------------------------------------------------------------- +dnl Provide a mechanism to disable real mutex support (if lacking win32 or +dnl posix mutexes for instance). +dnl --------------------------------------------------------------------------- + +AC_ARG_WITH([mutex], + AS_HELP_STRING([--without-mutex], + [Disable real mutex locks (lacking pthreads)]),,) + +AC_MSG_CHECKING([for mutexes]) +THREAD_LIB="" +if test "$with_mutex" = yes -o x"$with_mutex" = x ; then + MUTEX_SETTING=pthread + AC_CHECK_LIB(pthread,pthread_create,PTHREAD_EXISTS=YES,,,) + if test -n "$PTHREAD_EXISTS" ; then + THREAD_LIB="-lpthread" + fi + AC_CHECK_LIB(pthread,pthread_mutexattr_settype,,,) + AC_CHECK_DECL(PTHREAD_MUTEX_RECURSIVE, + AC_DEFINE(HAVE_PTHREAD_MUTEX_RECURSIVE, [], [Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE]), + , + [#include ]) + AC_MSG_RESULT([enabled, pthread]) +else + MUTEX_SETTING=stub + AC_MSG_RESULT([disabled by user]) +fi + +AC_SUBST(MUTEX_SETTING,$MUTEX_SETTING) +AC_SUBST(THREAD_LIB,$THREAD_LIB) + +AC_CONFIG_FILES([Makefile cmake/Makefile src/Makefile + man/Makefile man/man1/Makefile man/man3/Makefile nad/Makefile + jniwrap/Makefile jniwrap/org/Makefile jniwrap/org/proj4/Makefile]) +AC_CONFIG_FILES([nad/install], [chmod +x nad/install]) + +AC_CONFIG_FILES([proj.pc]) + +AC_OUTPUT diff --git a/proj4/docs/Makefile b/proj4/docs/Makefile new file mode 100644 index 000000000000..4bd082c8e7f5 --- /dev/null +++ b/proj4/docs/Makefile @@ -0,0 +1,216 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/proj4.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/proj4.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/proj4" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/proj4" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/proj4/docs/images/healpix.png b/proj4/docs/images/healpix.png new file mode 100644 index 000000000000..0f448469e07b Binary files /dev/null and b/proj4/docs/images/healpix.png differ diff --git a/proj4/docs/images/rhealpix.png b/proj4/docs/images/rhealpix.png new file mode 100644 index 000000000000..497b364e8777 Binary files /dev/null and b/proj4/docs/images/rhealpix.png differ diff --git a/proj4/docs/old/SWISS.pdf b/proj4/docs/old/SWISS.pdf new file mode 100644 index 000000000000..700ca06ce952 Binary files /dev/null and b/proj4/docs/old/SWISS.pdf differ diff --git a/proj4/docs/old/libproj.pdf b/proj4/docs/old/libproj.pdf new file mode 100644 index 000000000000..b5fa6160b3b0 Binary files /dev/null and b/proj4/docs/old/libproj.pdf differ diff --git a/proj4/docs/old/of90-284.pdf b/proj4/docs/old/of90-284.pdf new file mode 100644 index 000000000000..7c07aa31a8be Binary files /dev/null and b/proj4/docs/old/of90-284.pdf differ diff --git a/proj4/docs/old/proj_4_3.pdf b/proj4/docs/old/proj_4_3.pdf new file mode 100644 index 000000000000..085a9be93474 Binary files /dev/null and b/proj4/docs/old/proj_4_3.pdf differ diff --git a/proj4/docs/old/proj_4_3_12.pdf b/proj4/docs/old/proj_4_3_12.pdf new file mode 100644 index 000000000000..62967ba3d2ea Binary files /dev/null and b/proj4/docs/old/proj_4_3_12.pdf differ diff --git a/proj4/docs/source/_templates/layout.html b/proj4/docs/source/_templates/layout.html new file mode 100644 index 000000000000..df00789aedf1 --- /dev/null +++ b/proj4/docs/source/_templates/layout.html @@ -0,0 +1,20 @@ +{# Import the theme's layout. #} +{% extends "!layout.html" %} + +{# Add some extra stuff before and use existing with 'super()' call. #} + +{%- block footer %} + +{%- endblock %} diff --git a/proj4/docs/source/conf.py b/proj4/docs/source/conf.py new file mode 100644 index 000000000000..d985b8c30b68 --- /dev/null +++ b/proj4/docs/source/conf.py @@ -0,0 +1,352 @@ +# -*- coding: utf-8 -*- +# +# proj.4 documentation build configuration file, created by +# sphinx-quickstart on Wed Feb 24 10:47:15 2016. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import sphinx_bootstrap_theme + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.mathjax', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'proj.4' +copyright = u'1986?-2016' +author = u'Gerald Evenden' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'4.9.3' +# The full version, including alpha/beta/rc tags. +release = u'4.9.3' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'bootstrap' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +html_theme_options = { + # Navigation bar title. (Default: ``project`` value) + 'navbar_title': "", + + # Tab name for entire site. (Default: "Site") + 'navbar_site_name': "Docs", + + # A list of tuples containing pages or urls to link to. + # Valid tuples should be in the following forms: + # (name, page) # a link to a page + # (name, "/aa/bb", 1) # a link to an arbitrary relative url + # (name, "http://example.com", True) # arbitrary absolute url + # Note the "1" or "True" value above as the third argument to indicate + # an arbitrary url. + 'navbar_links': [ + ("Download", "download"), + ("GitHub", "https://github.com/OSGeo/proj.4", True), + ], + + # Render the next and previous page links in navbar. (Default: true) + 'navbar_sidebarrel': True, + + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': True, + + # Tab name for the current pages TOC. (Default: "Page") + 'navbar_pagenav_name': "Here", + + # Global TOC depth for "site" navbar tab. (Default: 1) + # Switching to -1 shows all levels. + 'globaltoc_depth': 2, + + # Include hidden TOCs in Site navbar? + # + # Note: If this is "false", you cannot have mixed ``:hidden:`` and + # non-hidden ``toctree`` directives in the same page, or else the build + # will break. + # + # Values: "true" (default) or "false" + 'globaltoc_includehidden': "true", + + # HTML navbar class (Default: "navbar") to attach to
element. + # For black navbar, do "navbar navbar-inverse" + 'navbar_class': "navbar", + + # Fix navigation bar to top of page? + # Values: "true" (default) or "false" + 'navbar_fixed_top': "true", + + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + 'source_link_position': "nav", + + # Bootswatch (http://bootswatch.com/) theme. + # + # Options are nothing (default) or the name of a valid theme + # such as "amelia" or "cosmo". + 'bootswatch_theme': "paper", + + # Choose Bootstrap version. + # Values: "3" (default) or "2" (in quotes) + 'bootstrap_version': "3", +} + + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() + + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +html_last_updated_fmt = '%d %b %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = False + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'proj4doc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', + +# Latex figure (float) alignment +#'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'proj4.tex', u'proj.4 Documentation', + u'Gerald Evenden', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'proj4', u'proj.4 Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'proj4', u'proj.4 Documentation', + author, 'proj4', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/proj4/docs/source/download.rst b/proj4/docs/source/download.rst new file mode 100644 index 000000000000..c4b65aa74a02 --- /dev/null +++ b/proj4/docs/source/download.rst @@ -0,0 +1,45 @@ +.. _download: + +================================================================================ +Download +================================================================================ + +.. contents:: Contents + :depth: 3 + :backlinks: none + + +Current Release +-------------------------------------------------------------------------------- + +* **2015-09-13** `proj-4.9.2.tar.gz`_ `Release Notes`_ (`md5`_) + +Past Releases +-------------------------------------------------------------------------------- + +* **2015-03-04** `proj-4.9.1.tar.gz`_ + +.. _`proj-4.9.1.tar.gz`: http://download.osgeo.org/proj/proj-4.9.1.tar.gz +.. _`proj-4.9.2.tar.gz`: http://download.osgeo.org/proj/proj-4.9.2.tar.gz +.. _`md5`: http://download.osgeo.org/proj/proj-4.9.2.tar.gz.md5 +.. _`Release Notes`: http://lists.maptools.org/pipermail/proj/2015-September/007270.html + +Binaries +-------------------------------------------------------------------------------- + +Linux +................................................................................ + +* `RedHat RPMs `__ +* `SUSE `__ +* `Debian `__ +* `pkgsrc `__ +* `Delphi `__ + + +Windows +................................................................................ + +* `OSGeo4W`_ contains 32-bit and 64-bit Windows binaries, including support for many :ref:`grids `. + +.. _`OSGeo4W`: https://trac.osgeo.org/osgeo4w/ diff --git a/proj4/docs/source/faq.rst b/proj4/docs/source/faq.rst new file mode 100644 index 000000000000..929386df727c --- /dev/null +++ b/proj4/docs/source/faq.rst @@ -0,0 +1,332 @@ +.. _faq: + +****************************************************************************** +FAQ +****************************************************************************** + +.. contents:: Contents + :depth: 3 + :backlinks: none + + + +Where can I find the list of projections and their arguments? +-------------------------------------------------------------------------------- + +There is no simple single location to find all the required information. The +!PostScript/PDF documents listed on the [http://trac.osgeo.org/proj/wiki main] +PROJ.4 page under documentation are the authoritative source but projections +and options are spread over several documents in a form more related to their +order of implementation than anything else. + +The '''proj''' command itself can report the list of projections using the +'''-lp''' option, the list of ellipsoids with the '''-le''' option, the list of +units with the '''-lu''' option, and the list of built-in datums with the +'''-ld''' option. + +The [http://www.remotesensing.org/geotiff/proj_list/ GeoTIFF Projections Pages] +include most of the common PROJ.4 projections, and a definition of the +projection specific options for each. + +* How do I do datum shifts between NAD27 and NAD83? + +While the '''nad2nad''' program can be used in some cases, the '''cs2cs''' is +now the preferred mechanism. The following example demonstrates using the +default shift parameters for NAD27 to NAD83: + + +:: + + % cs2cs +proj=latlong +datum=NAD27 +to +proj=latlong +datum=NAD83 -117 30 + + +producing: + +:: + + 117d0'2.901"W 30d0'0.407"N 0.000 + +In order for datum shifting to work properly the various grid shift files must +be available. See below. More details are available in the +[wiki:GenParms#nadgrids-GridBasedDatumAdjustments General Parameters] document. + +How do I build/configure PROJ.4 to support datum shifting? +-------------------------------------------------------------------------------- + +After downloading and unpacking the PROJ.4 source, also download and unpack the +set of datum shift files. See :ref:`download` for instructions how to fetch +and install these files + +On Windows the extra nadshift target must be used. For instance +``nmake /f makefile.vc nadshift`` in the ``proj/src`` directory. + +A default build and install on Unix will normally build knowledge of the +directory where the grid shift files are installed into the PROJ.4 library +(usually /usr/local/share/proj). On Windows the library is normally built +thinking that C:\PROJ\NAD is the installed directory for the grid shift files. +If the built in concept of the PROJ.4 data directory is incorrect, the ``PROJ_LIB`` +environment can be defined with the correct directory. + +How do I debug problems with NAD27/NAD83 datum shifting? +-------------------------------------------------------------------------------- + +1. Verify that you have the binary files (eg. /usr/local/share/proj/conus) + installed on your system. If not, see the previous question. +2. Try a datum shifting operation in relative isolation, such as with the cs2cs + command listed above. Do you get reasonable results? If not it is likely + the grid shift files aren't being found. Perhaps you need to define + PROJ_LIB? +3. The cs2cs command and the underlying pj_transform() API know how to do a + grid shift as part of a more complex coordinate transformation; however, it + is imperative that both the source and destination coordinate system be + defined with appropriate datum information. That means that implicitly or + explicitly there must be a +datum= clause, a +nadgrids= clause or a + +towgs84= clause. For instance + ``cs2cs +proj=latlong +datum=NAD27 +to +proj=latlong +ellps=WGS84`` won't work because defining the output + coordinate system as using the ellipse WGS84 isn't the same as defining it + to use the datum WGS84 (use +datum=WGS84). If either the input or output + are not identified as having a datum, the datum shifting (and ellipsoid + change) step is just quietly skipped! +4. The ``PROJ_DEBUG`` environment can be defined (any value) to force extra output + from the PROJ.4 library to stderr (the text console normally) with + information on what data files are being opened and in some cases why a + transformation fails. + + :: + + export PROJ_DEBUG=ON + cs2cs ... + + + .. note:: + ``PROJ_DEBUG`` support is not yet very mature in the PROJ.4 library. + +5. The ``-v`` flag to cs2cs can be useful in establishing more detail on what + parameters being used internally for a coordinate system. This will include + expanding the definition of +datum clause. + +How do I use EPSG coordinate system codes with PROJ.4? +-------------------------------------------------------------------------------- + +There is somewhat imperfect translation between 2d geographic and projected +coordinate system codes and PROJ.4 descriptions of the coordinate system +available in the epsg definition file that normally lives in the proj/nad +directory. If installed (it is installed by default on Unix), it is possible +to use EPSG numbers like this: + +:: + + + % cs2cs -v +init=epsg:26711 + # ---- From Coordinate System ---- + #Universal Transverse Mercator (UTM) + # Cyl, Sph + # zone= south + # +init=epsg:26711 +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m + # +no_defs +nadgrids=conus,ntv1_can.dat + #--- following specified but NOT used + # +ellps=clrk66 + # ---- To Coordinate System ---- + #Lat/long (Geodetic) + # + # +proj=latlong +datum=NAD27 +ellps=clrk66 +nadgrids=conus,ntv1_can.dat + +The proj/nad/epsg file can be browsed and searched in a text editor for +coordinate systems. There are known to be problems with some coordinate +systems, and any coordinate systems with odd axes, a non-greenwich prime +meridian or other quirkyness are unlikely to work properly. Caveat Emptor! + +How do I use 3 parameter and 7 parameter datum shifting +-------------------------------------------------------------------------------- + +Datum shifts can be approximated with 3 and 7 parameter transformations. Their +use is more fully described in the +[wiki:GenParms#towgs84-DatumtransformationtoWGS84 towgs84] parameter +discussion. + +Does PROJ.4 work in different international numeric locales? +-------------------------------------------------------------------------------- + +No. PROJ.4 makes extensive use of sprintf() and atof() internally to translate +numeric values. If a locale is in effect that modifies formatting of numbers, +altering the role of commas and periods in numbers, then PROJ.4 will not work. +This problem is common in some European locales. + +On unix-like platforms, this problem can be avoided by forcing the use of the +default numeric locale by setting the LC_NUMERIC environment variable to C. + +:: + + $ export LC_NUMERIC=C + $ proj ... + +.. note:: + + NOTE: Per ticket #49, in PROJ 4.7.0 and later pj_init() operates with locale + overriden to "C" to avoid most locale specific processing for applications + using the API. Command line tools may still have issues. + +Changing Ellipsoid / Why can't I convert from WGS84 to Google Earth / Virtual Globe Mercator? +---------------------------------------------------------------------------------------------- + +The coordinate system definition for Google Earth, and Virtual Globe Mercator +is as follows, which uses a sphere as the earth model for the Mercator +projection. + +:: + + +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 +no_defs + +But, if you do something like: + +:: + + cs2cs +proj=latlong +datum=WGS84 + +to +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 +no_defs + +to convert between WGS84 and mercator on the sphere there will be substantial +shifts in the Y mercator coordinates. This is because internally cs2cs is +having to adjust the lat/long coordinates from being on the sphere to being on +the WGS84 datum which has a quite differently shaped ellipsoid. + +In this case, and many other cases using spherical projections, the desired +approach is to actually treat the lat/long locations on the sphere as if they +were on WGS84 without any adjustments when using them for converting to other +coordinate systems. The solution is to "trick" PROJ.4 into applying no change +to the lat/long values when going to (and through) WGS84. This can be +accomplished by asking PROJ to use a null grid shift file for switching from +your spherical lat/long coordinates to WGS84. + +:: + + cs2cs +proj=latlong +datum=WGS84 \ + +to +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 +no_defs + +Note the strategic addition of +nadgrids=@null to the spherical projection +definition. + +Similar issues apply with many other datasets distributed with projections +based on a spherical earth model - such as many NASA datasets. This coordinate +system is now known by the EPSG code 3857 and has in the past been known as +EPSG:3785 and EPSG:900913. When using this coordinate system with GDAL/OGR it +is helpful to include the +wktext so the exact proj.4 string will be preserved +in the WKT representation (otherwise key parameters like `+nadgrids=@null` will +be dropped): + +:: + + +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 + +Why do I get different results with 4.5.0 and 4.6.0? +-------------------------------------------------------------------------------- + +The default datum application behavior changed with the 4.6.0 release. PROJ.4 +will now only apply a datum shift if both the source and destination coordinate +system have valid datum shift information. + +From the PROJ.4 4.6.0 Release Notes (in NEWS): + * MAJOR: Rework pj_transform() to avoid applying ellipsoid to ellipsoid + transformations as a datum shift when no datum info is available. + + +How do I calculate distances/directions on the surface of the earth? +-------------------------------------------------------------------------------- + +These are called geodesic calculations. There is a page about it here: +[wiki:GeodesicCalculations] + +What is the HEALPix projection and how can I use it? +-------------------------------------------------------------------------------- + +.. figure:: + ../images/rhealpix.png + :scale: 40% + :align: left + +The HEALPix projection is area preserving and can be used with a +spherical and ellipsoidal model. It was initially developed for mapping cosmic +background microwave radiation. The image below is the graphical +representation of the mapping and consists of eight isomorphic triangular +interrupted map graticules. The north and south contains four in which +straight meridians converge polewards to a point and unequally spaced +horizontal parallels. HEALPix provides a mapping in which points of equal +latitude and equally spaced longitude are mapped to points of equal latitude +and equally spaced longitude with the module of the polar interruptions. || + +To run a forward HEALPix projection on a unit sphere model, use the following command: + +:: + + proj +proj=healpix +lon_0=0 +a=1 -E <`__, for +more information. + +Thaddeus Vincenty's method, April 1975 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For a very good procedure to calculate inter point distances see: + +http://www.ngs.noaa.gov/PC_PROD/Inv_Fwd/ (Fortan code, DOS executables, and an online app) + +and algorithm details published in: `Vincenty, T. (1975) `__ + +Javascript code +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Chris Veness has coded Vincenty's formulas as !JavaScript. + +distance: http://www.movable-type.co.uk/scripts/latlong-vincenty.html + +direct: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html + +C code +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +From Gerald Evenden: a library of the converted NGS Vincenty geodesic procedure +and an application program, 'geodesic'. In the case of a spherical earth +Snyder's preferred equations are used. + +* http://article.gmane.org/gmane.comp.gis.proj-4.devel/3588/ + +The link in this message is broken. The correct URL is +http://home.comcast.net/~gevenden56/proj/ + +Earlier Mr. Evenden had posted to the PROJ.4 mailing list this code for +determination of true distance and respective forward and back azimuths between +two points on the ellipsoid. Good for any pair of points that are not +antipodal. +Later he posted that this was not in fact the translation of NGS FORTRAN code, +but something else. But, for what it's worth, here is the posted code (source +unknown): + +* http://article.gmane.org/gmane.comp.gis.proj-4.devel/3478 + + +PROJ.4 - geod program +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +The PROJ.4 [wiki:man_geod geod] program can be used for great circle distances +on an ellipsoid. As of proj verion 4.9.0, this uses a translation of +GeographicLib::Geodesic (see below) into C. The underlying geodesic +calculation API is exposed as part of the PROJ.4 library (via the geodesic.h +header). Prior to version 4.9.0, the algorithm documented here was used: +` +Paul D. Thomas, 1970 +Spheroidal Geodesics, Reference Systems, and Local Geometry" +U.S. Naval Oceanographic Office, p. 162 +Engineering Library 526.3 T36s + +http://handle.dtic.mil/100.2/AD0703541 + +GeographicLib::Geodesic +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Charles Karney has written a C++ class to do geodesic calculations and a +utility GeodSolve to call it. See + +* http://geographiclib.sourceforge.net/geod.html + +An online version of GeodSolve is available at + +* http://geographiclib.sourceforge.net/cgi-bin/GeodSolve + +This is an attempt to do geodesic calculations "right", i.e., + +* accurate to round-off (i.e., about 15 nm); +* inverse solution always succeeds (even for near anti-podal points); +* reasonably fast (comparable in speed to Vincenty); +* differential properties of geodesics are computed (these give the scales of + geodesic projections); +* the area between a geodesic and the equator is computed (allowing the + area of geodesic polygons to be found); +* included also is an implementation in terms of elliptic integrals which + can deal with ellipsoids with 0.01 < b/a < 100. + +A JavaScript implementation is included, see + +* `geo-calc `__, + a text interface to geodesic calculations; +* `geod-google `__, + a tool for drawing geodesics on Google Maps. + +Implementations in `Python `__, +`Matlab `__, +`C `__, +`Fortran `__ , and +`Java `__ are also available. + +The algorithms are described in + * C. F. F. Karney, `Algorithms for gedesics `__, + J. Geodesy '''87'''(1), 43-55 (2013), + DOI: `10.1007/s00190-012-0578-z `__; `geo-addenda.html `__. + +Triaxial Ellipsoid +................................................................................ + +A triaxial ellipsoid is a marginally better approximation to the shape of the earth +than an ellipsoid of revolution. +The problem of geodesics on a triaxial ellipsoid was solved by Jacobi in 1838. +For a discussion of this problem see +* http://geographiclib.sourceforge.net/html/triaxial.html +* the wikipedia entry: `Geodesics on a triaxial ellipsoid `__ + +The History +-------------------------------------------------------------------------------- + +The bibliography of papers on the geodesic problem for an ellipsoid is +available at + +* http://geographiclib.sourceforge.net/geodesic-papers/biblio.html + +this includes links to online copies of the papers. diff --git a/proj4/docs/source/grids.rst b/proj4/docs/source/grids.rst new file mode 100644 index 000000000000..968304896758 --- /dev/null +++ b/proj4/docs/source/grids.rst @@ -0,0 +1,167 @@ +.. _grids: + +================================================================================ +Grids +================================================================================ + +.. contents:: Contents + :depth: 3 + :backlinks: none + + +Grid files are important for shifting and transforming between datums + +US, Canadian, French and New Zealand +-------------------------------------------------------------------------------- + +* http://download.osgeo.org/proj/proj-datumgrid-1.5.zip: US, Canadian, French + and New Zealand datum shift grids - unzip in the `nad` directory before + configuring to add NAD27/NAD83 and NZGD49 datum conversion + +Switzerland +-------------------------------------------------------------------------------- + +Background in ticket `#145 `__ + +We basically have two shift grids available. An official here: + +`Swiss CHENyx06 dataset in NTv2 format `__ + +And a derived in a temporary location which is probably going to disappear soon. + +Main problem seems to be there's no mention of distributivity of the grid from +the official website. It just tells: "you can use freely". The "contact" link +is also broken, but maybe someone could make a phone call to ask for rephrasing +that. + +HARN +-------------------------------------------------------------------------------- + +With the support of `i-cubed `__, Frank Warmerdam has +written tools to translate the HPGN grids from NOAA/NGS from ``.los/.las`` format +into NTv2 format for convenient use with PROJ.4. This project included +implementing a `.los/.las reader `__ +for GDAL, and an `NTv2 reader/writer `__. +Also, a script to do the bulk translation was implemented in +https://github.com/OSGeo/gdal/tree/trunk/gdal/swig/python/samples/loslas2ntv2.py. +The command to do the translation was: + +:: + + loslas2ntv2.py -auto *hpgn.los + +As GDAL uses NAD83/WGS84 as a pivot datum, the sense of the HPGN datum shift offsets were negated to map from HPGN to NAD83 instead of the other way. The files can be used with PROJ.4 like this: + +:: + + cs2cs +proj=latlong +datum=NAD83 + +to +proj=latlong +nadgrids=./azhpgn.gsb +ellps=GRS80 + +:: + + # input: + -112 34 + +:: + + # output: + 111d59'59.996"W 34d0'0.006"N -0.000 + +This was confirmed against the `NGS HPGN calculator +`__. + +The grids are available at http://download.osgeo.org/proj/hpgn_ntv2.zip + +.. seealso:: + :ref:`htpd` describes similar grid shifting + +HTDP +-------------------------------------------------------------------------------- + +:ref:`htpd` describes the situation with HTDP grids based on NOAA/NGS HTDP Model. + + +Non-Free Grids +-------------------------------------------------------------------------------- + +Not all grid shift files have licensing that allows them to be freely +distributed, but can be obtained by users through free and legal methods. + +Canada NTv2.0 +................................................................................ +Although NTv1 grid shifts are provided freely with PROJ.4, the higher-quality +NTv2.0 file needs to be downloaded from Natural Resources Canada. More info: +http://www.geod.nrcan.gc.ca/tools-outils/ntv2_e.php. + +Procedure: + +1. Visit the `NTv2 `__, and register/login +2. Follow the Download NTv2 link near the bottom of the page. +3. Unzip `ntv2_100325.zip` (or similar), and move the grid shift file `NTV2_0.GSB` to the proj directory (be sure to change the name to lowercase for consistency) + * e.g.: `mv NTV2_0.GSB /usr/local/share/proj/ntv2_0.gsb` +4. Test it using: + :: + + cs2cs +proj=latlong +ellps=clrk66 +nadgrids=@ntv2_0.gsb +to +proj=latlong +ellps=GRS80 +datum=NAD83 + -111 50 + + :: + + 111d0'3.006"W 50d0'0.103"N 0.000 # correct answer + +Australia +................................................................................ + +`Geocentric Datum of Australia AGD66/AGD84 `__ + +Canada +................................................................................ + +`Canadian NTv2 grid shift binary `__ for NAD27 <=> NAD83. + +Germany +................................................................................ + +`German BeTA2007 DHDN GK3 => ETRS89/UTM `__ + +Great Britain +................................................................................ + +`Great Britain's OSTN02_NTv2: OSGB 1936 => ETRS89 `__ + +Austria +................................................................................ + +`Austrian Grid `__ for MGI + +Spain +................................................................................ + +`Spanish grids `__ for ED50. + +Portugal +................................................................................ + +`Portuguese grids `__ for ED50, Lisbon 1890, Lisbon 1937 and Datum 73 + +Brazil +................................................................................ + +`Brazilian grids `__ for datums Corrego Alegre 1961, Corrego Alegre 1970-72, SAD69 and SAD69(96) + +South Africa +................................................................................ + +`South African grid `__ (Cape to Hartebeesthoek94 or WGS84) + +Netherlands +................................................................................ + +`Dutch grid `__ (Registration required before download) + +Hungary +................................................................................ + +`Hungarian grid `__ ETRS89 - HD72/EOV (epsg:23700), both horizontal and elevation grids + + diff --git a/proj4/docs/source/htpd.rst b/proj4/docs/source/htpd.rst new file mode 100644 index 000000000000..2209c8650dbc --- /dev/null +++ b/proj4/docs/source/htpd.rst @@ -0,0 +1,136 @@ +.. _htpd: + +================================================================================ +HTPD +================================================================================ + +.. contents:: Contents + :depth: 2 + :backlinks: none + +This page documents use of the `crs2crs2grid.py` script and the HTDP +(Horizontal Time Dependent Positioning) grid shift modelling program from +NGS/NOAA to produce PROJ.4 compatible grid shift files for fine grade +conversions between various NAD83 epochs and WGS84. Traditionally PROJ.4 has +treated NAD83 and WGS84 as equivalent and failed to distinguish between +different epochs or realizations of those datums. At the scales of much +mapping this is adequate but as interest grows in high resolution imagery and +other high resolution mapping this is inadequate. Also, as the North American +crust drifts over time the displacement between NAD83 and WGS84 grows (more +than one foot over the last two decades). + +Getting and building HTDP +-------------------------------------------------------------------------------- + +The HTDP modelling program is in written FORTRAN. The source and documentation +can be found on the HTDP page at http://www.ngs.noaa.gov/TOOLS/Htdp/Htdp.shtml + +On linux systems it will be necessary to install `gfortran` or some FORTRAN +compiler. For ubuntu something like the following should work. + +:: + + apt-get install gfortran + +To compile the program do something like the following to produce the binary "htdp" from the source code. + +:: + + gfortran htdp.for -o htdp + +Getting crs2crs2grid.py +-------------------------------------------------------------------------------- + +The `crs2crs2grid.py` script can be found at +https://github.com/OSGeo/gdal/tree/trunk/gdal/swig/python/samples/crs2crs2grid.py + +It depends on having the GDAL Python bindings operational. If they are not +available you will get an error something like the following: + + +:: + + Traceback (most recent call last): + File "./crs2crs2grid.py", line 37, in + from osgeo import gdal, gdal_array, osr + ImportError: No module named osgeo + +Usage +-------------------------------------------------------------------------------- + +:: + + crs2crs2grid.py + + [-griddef ] + [-htdp ] [-wrkdir ] [-kwf] + -o + + -griddef: by default the following values for roughly the continental USA + at a six minute step size are used: + -127 50 -66 25 251 611 + -kwf: keep working files in the working directory for review. + +:: + + crs2crs2grid.py 29 2002.0 8 2002.0 -o nad83_2002.ct2 + +The goal of `crs2crs2grid.py` is to produce a grid shift file for a designated +region. The region is defined using the `-griddef` switch. When missing a +continental US region is used. The script creates a set of sample points for +the grid definition, runs the "htdp" program against it and then parses the +resulting points and computes a point by point shift to encode into the final +grid shift file. By default it is assumed the `htdp` program will be in the +executable path. If not, please provide the path to the executable using the +`-htdp` switch. + +The `htdp` program supports transformations between many CRSes and for each (or +most?) of them you need to provide a date at which the CRS is fixed. The full +set of CRS Ids available in the HTDP program are: + +:: + + 1...NAD_83(2011) (North America tectonic plate fixed) + 29...NAD_83(CORS96) (NAD_83(2011) will be used) + 30...NAD_83(2007) (NAD_83(2011) will be used) + 2...NAD_83(PA11) (Pacific tectonic plate fixed) + 31...NAD_83(PACP00) (NAD 83(PA11) will be used) + 3...NAD_83(MA11) (Mariana tectonic plate fixed) + 32...NAD_83(MARP00) (NAD_83(MA11) will be used) + + 4...WGS_72 16...ITRF92 + 5...WGS_84(transit) = NAD_83(2011) 17...ITRF93 + 6...WGS_84(G730) = ITRF92 18...ITRF94 = ITRF96 + 7...WGS_84(G873) = ITRF96 19...ITRF96 + 8...WGS_84(G1150) = ITRF2000 20...ITRF97 + 9...PNEOS_90 = ITRF90 21...IGS97 = ITRF97 + 10...NEOS_90 = ITRF90 22...ITRF2000 + 11...SIO/MIT_92 = ITRF91 23...IGS00 = ITRF2000 + 12...ITRF88 24...IGb00 = ITRF2000 + 13...ITRF89 25...ITRF2005 + 14...ITRF90 26...IGS05 = ITRF2005 + 15...ITRF91 27...ITRF2008 + 28...IGS08 = ITRF2008 + +The typical use case is mapping from NAD83 on a particular date to WGS84 on +some date. In this case the source CRS Id "29" (NAD_83(CORS96)) and the +destination CRS Id is "8 (WGS_84(G1150)). It is also necessary to select the +source and destination date (epoch). For example: + +:: + + crs2crs2grid.py 29 2002.0 8 2002.0 -o nad83_2002.ct2 + +The output is a CTable2 format grid shift file suitable for use with PROJ.4 +(4.8.0 or newer). It might be utilized something like: + + +:: + + cs2cs +proj=latlong +ellps=GRS80 +nadgrids=./nad83_2002.ct2 +to +proj=latlong +datum=WGS84 + +See Also +-------------------------------------------------------------------------------- + +* http://www.ngs.noaa.gov/TOOLS/Htdp/Htdp.shtml - NGS/NOAA page about the HTDP + model and program. Source for the HTDP program can be downloaded from here. diff --git a/proj4/docs/source/index.rst b/proj4/docs/source/index.rst new file mode 100644 index 000000000000..1e9e3509a222 --- /dev/null +++ b/proj4/docs/source/index.rst @@ -0,0 +1,52 @@ +.. _home: + +****************************************************************************** +proj.4 +****************************************************************************** + +proj.4 is a standard Unix filter function which converts geographic longitude +and latitude coordinates into cartesian coordinates (and vice versa), and it is +a C API for software developers to include coordinate transformation in their +own software. + + +============= ================================================================ + Platform Test Status and Coverage +============= ================================================================ +Travis |travis| +AppVeyor |appveyor| +Coverage |coverals| +============= ================================================================ + +.. |travis| image:: https://travis-ci.org/OSGeo/proj.4.svg?branch=master + :target: https://travis-ci.org/OSGeo/proj.4 +.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/584j49uguwoo5evi?svg=true + :target: https://ci.appveyor.com/project/OSGeo/proj-4 +.. |coverals| image:: https://coveralls.io/repos/OSGeo/proj.4/badge.svg?branch=master + :target: https://coveralls.io/r/OSGeo/proj.4?branch=master + +Documentation +================= + +.. toctree:: + :maxdepth: 1 + + download + faq + geodesic + grids + license + htpd + threads + parameters + + + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` + diff --git a/proj4/docs/source/license.rst b/proj4/docs/source/license.rst new file mode 100644 index 000000000000..bd4f633cf8a0 --- /dev/null +++ b/proj4/docs/source/license.rst @@ -0,0 +1,46 @@ +.. _license: + +================================================================================ +License +================================================================================ + +:Author: Frank Warmerdam +:Contact: warmerdam@pobox.com +:Date: 2001 + +PROJ.4 has been placed under an MIT license. I believe this to be as close as +possible to public domain while satisfying those who say that a copyright +notice is required in some countries. The COPYING file read as follows: + +All source, data files and other contents of the PROJ.4 package are available +under the following terms. Note that the PROJ 4.3 and earlier was "public +domain" as is common with US government work, but apparently this is not a well +defined legal term in many countries. I am placing everything under the +following MIT style license because I believe it is effectively the same as +public domain, allowing anyone to use the code as they wish, including making +proprietary derivatives. + +Though I have put my own name as copyright holder, I don't mean to imply I did +the work. Essentially all work was done by Gerald Evenden. + +:: + + Copyright (c) 2000, 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. diff --git a/proj4/docs/source/parameters.rst b/proj4/docs/source/parameters.rst new file mode 100644 index 000000000000..1e0e76fcc583 --- /dev/null +++ b/proj4/docs/source/parameters.rst @@ -0,0 +1,455 @@ +.. _parameters: + +================================================================================ +Parameters +================================================================================ + +:Date: 01/28/2016 + +.. contents:: Contents + :depth: 3 + :backlinks: none + + +This document attempts to describe a variety of the PROJ.4 parameters which can +be applied to all, or many coordinate system definitions. This document does +not attempt to describe the parameters particular to particular projection +types. Some of these can be found in the GeoTIFF `Projections Transform List +`__. The definitive +documentation for most parameters is Gerald's original documentation available +from the main PROJ.4 page. + +Parameter list +-------------------------------------------------------------------------------- + +Common parameters: + +(this PROJ.4 distribution including `cs2cs` and datum support) + +:: + + +a Semimajor radius of the ellipsoid axis + +alpha ? Used with Oblique Mercator and possibly a few others + +axis Axis orientation (new in 4.8.0) + +b Semiminor radius of the ellipsoid axis + +datum Datum name (see `proj -ld`) + +ellps Ellipsoid name (see `proj -le`) + +k Scaling factor (old name) + +k_0 Scaling factor (new name) + +lat_0 Latitude of origin + +lat_1 Latitude of first standard parallel + +lat_2 Latitude of second standard parallel + +lat_ts Latitude of true scale + +lon_0 Central meridian + +lonc ? Longitude used with Oblique Mercator and possibly a few others + +lon_wrap Center longitude to use for wrapping (see below) + +nadgrids Filename of NTv2 grid file to use for datum transforms (see below) + +no_defs Don't use the /usr/share/proj/proj_def.dat defaults file + +over Allow longitude output outside -180 to 180 range, disables wrapping (see below) + +pm Alternate prime meridian (typically a city name, see below) + +proj Projection name (see `proj -l`) + +south Denotes southern hemisphere UTM zone + +to_meter Multiplier to convert map units to 1.0m + +towgs84 3 or 7 term datum transform parameters (see below) + +units meters, US survey feet, etc. + +vto_meter vertical conversion to meters. + +vunits vertical units. + +x_0 False easting + +y_0 False northing + +zone UTM zone + +Extended list provided by Gerald Evenden "grepped out of the RCS directory". + +(libproj4 by G.E.; no datum support) + +:: + + +a Semimajor radius of the ellipsoid axis + +alpha ? Used with Oblique Mercator and possibly a few others + +azi + +b Semiminor radius of the ellipsoid axis + +belgium + +beta + +czech + +e Eccentricity of the ellipsoid = sqrt(1 - b^2/a^2) = sqrt( f*(2-f) ) + +ellps Ellipsoid name (see `proj -le`) + +es Eccentricity of the ellipsoid squared + +f Flattening of the ellipsoid = 1-sqrt(1-e^2) (often presented as an inverse, e.g. 1/298) + +geoc + +guam + +h + +k Scaling factor (old name) + +K + +k_0 Scaling factor (new name) + +lat_0 Latitude of origin + +lat_1 Latitude of first standard parallel + +lat_2 Latitude of second standard parallel + +lat_b + +lat_t + +lat_ts Latitude of true scale + +lon_0 Central meridian + +lon_1 + +lon_2 + +lonc ? Longitude used with Oblique Mercator and possibly a few others + +lsat + +m + +M + +n + +no_cut + +no_off + +no_rot + +ns + +o_alpha + +o_lat_1 + +o_lat_2 + +o_lat_c + +o_lat_p + +o_lon_1 + +o_lon_2 + +o_lon_c + +o_lon_p + +o_proj + +over + +p + +path + +proj Projection name (see `proj -l`) + +q + +R + +R_a + +R_A Compute radius such that the area of the sphere is the same as the area of the ellipsoid + +rf Reciprocal of the ellipsoid flattening term (e.g. 298) + +R_g + +R_h + +R_lat_a + +R_lat_g + +rot + +R_V + +s + +south Denotes southern hemisphere UTM zone + +sym + +t + +theta + +tilt + +to_meter Multiplier to convert map units to 1.0m + +units meters, US survey feet, etc. + +vopt + +W + +westo + +x_0 False easting + +y_0 False northing + +zone UTM zone + +See GE's `libproj4 +manual `__ for +further details (`copy in wayback machine `__). + +Further details for projection at http://www.remotesensing.org/geotiff/proj_list/ + +Units +-------------------------------------------------------------------------------- + +Horizontal units can be specified using the +units= keyword with a symbolic +name for a unit (ie. us-ft). Alternatively the translation to meters can be +specified with the +to_meter keyword (ie. 0.304800609601219 for US feet). The +``-lu`` argument to cs2cs or proj can be used to list symbolic unit names. The +default unit is degrees. + +Vertical Units +-------------------------------------------------------------------------------- + +Vertical (Z) units can be specified using the ``+vunits=`` keyword with a +symbolic name for a unit (ie. ``us-ft``). Alternatively the translation to +meters can be specified with the ``+vto_meter`` keyword (ie. 0.304800609601219 +for US feet). The ``-lu`` argument to cs2cs or proj can be used to list symbolic +unit names. If no vertical units are specified, the vertical units will +default to be the same as the horizontal coordinates. + +Note that vertical unit transformations are only supported in pj_transform() +and programs built on that such as cs2cs. The low level projections functions +pj_fwd() and pj_inv() and programs using them directly such as proj do not +handle vertical units at all. + +False Easting/Northing +-------------------------------------------------------------------------------- + +Virtually all coordinate systems allow for the presence of a false easting +(``+x_0``) and northing (``+y_0``). Note that these values are always expressed in +meters even if the coordinate system is some other units. Some coordinate +systems (such as UTM) have implicit false easting and northing values. + +lon_wrap, over - Longitude Wrapping +-------------------------------------------------------------------------------- + +By default PROJ.4 wraps output longitudes in the range -180 to 180. The +over +switch can be used to disable the default wrapping which is done at a low level +- in ``pj_inv()``. This is particularly useful with projections like eqc where +it would desirable for X values past -20000000 (roughly) to continue past +-180 instead of wrapping to +180. + +The ``+lon_wrap`` option can be used to provide an alternative means of doing +longitude wrapping within ``pj_transform()``. The argument to this option is a +center longitude. So ``+lon_wrap=180`` means wrap longitudes in the range 0 to +360. Note that ``+over`` does **not** disable ``+lon_wrap``. + +pm - Prime Meridian +-------------------------------------------------------------------------------- + +A prime meridian may be declared indicating the offset between the prime +meridian of the declared coordinate system and that of greenwich. A prime +meridian is clared using the "pm" parameter, and may be assigned a symbolic +name, or the longitude of the alternative prime meridian relative to greenwich. + +Currently prime meridian declarations are only utilized by the +``pj_transform()`` API call, not the ``pj_inv()`` and ``pj_fwd()`` calls. +Consequently the user utility ``cs2cs`` does honour prime meridians but the +proj user utility ignores them. + +The following predeclared prime meridian names are supported. These can be +listed using the cs2cs argument -lm. + +:: + + greenwich 0dE + lisbon 9d07'54.862"W + paris 2d20'14.025"E + bogota 74d04'51.3"E + madrid 3d41'16.48"W + rome 12d27'8.4"E + bern 7d26'22.5"E + jakarta 106d48'27.79"E + ferro 17d40'W + brussels 4d22'4.71"E + stockholm 18d3'29.8"E + athens 23d42'58.815"E + oslo 10d43'22.5"E + +Example of use. The location ``long=0``, ``lat=0`` in the greenwich based lat/long +coordinates is translated to lat/long coordinates with Madrid as the prime +meridian. + +:: + + cs2cs +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 +pm=madrid + 0 0 (input) + 3d41'16.48"E 0dN 0.000 (output) + +towgs84 - Datum transformation to WGS84 +-------------------------------------------------------------------------------- + +Datum shifts can be approximated by 3 parameter spatial translations (in +geocentric space), or 7 parameter shifts (translation + rotation + scaling). +The parameters to describe this can be described using the towgs84 parameter. + +In the three parameter case, the three arguments are the translations to the +geocentric location in meters. + +For instance, the following demonstrates converting from the Greek GGRS87 datum +to WGS84. + +:: + + cs2cs +proj=latlong +ellps=GRS80 +towgs84=-199.87,74.79,246.62 + +to +proj=latlong +datum=WGS84 + 20 35 + 20d0'5.467"E 35d0'9.575"N 8.570 + +The EPSG database provides this example for transforming from WGS72 to WGS84 +using an approximated 7 parameter transformation. + +:: + + cs2cs +proj=latlong +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.219 \ + +to +proj=latlong +datum=WGS84 + 4 55 + 4d0'0.554"E 55d0'0.09"N 3.223 + +The seven parameter case uses ``delta_x``, ``delta_y``, ``delta_z``, ``Rx - +rotation X``, ``Ry - rotation Y``, ``Rz - rotation Z``, ``M_BF - Scaling``. +The three translation parameters are in meters as in the three parameter case. +The rotational parameters are in seconds of arc. The scaling is apparently the +scale change in parts per million. + +A more complete discussion of the 3 and 7 parameter transformations can be +found in the EPSG database (trf_method's 9603 and 9606). Within PROJ.4 the +following calculations are used to apply the ``towgs84`` transformation (going +to WGS84). The x, y and z coordinates are in geocentric coordinates. + +Three parameter transformation (simple offsets): + +:: + + x[io] = x[io] + defn->datum_params[0]; + y[io] = y[io] + defn->datum_params[1]; + z[io] = z[io] + defn->datum_params[2]; + +Seven parameter transformation (translation, rotation and scaling): + +:: + + #define Dx_BF (defn->datum_params[0]) + #define Dy_BF (defn->datum_params[1]) + #define Dz_BF (defn->datum_params[2]) + #define Rx_BF (defn->datum_params[3]) + #define Ry_BF (defn->datum_params[4]) + #define Rz_BF (defn->datum_params[5]) + #define M_BF (defn->datum_params[6]) + + x_out = M_BF*( x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF; + y_out = M_BF*( Rz_BF*x[io] + y[io] - Rx_BF*z[io]) + Dy_BF; + z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] + z[io]) + Dz_BF; + +Note that EPSG method 9607 (coordinate frame rotation) coefficients can be +converted to EPSG method 9606 (position vector 7-parameter) supported by PROJ.4 +by reversing the sign of the rotation vectors. The methods are otherwise the +same. + +nadgrids - Grid Based Datum Adjustments +-------------------------------------------------------------------------------- + +In many places (notably North America and Austrialia) national geodetic +organizations provide grid shift files for converting between different datums, +such as NAD27 to NAD83. These grid shift files include a shift to be applied +at each grid location. Actually grid shifts are normally computed based on an +interpolation between the containing four grid points. + +PROJ.4 currently supports use of grid shift files for shifting between datums +and WGS84 under some circumstances. The grid shift table formats are ctable +(the binary format produced by the PROJ.4 ``nad2bin`` program), NTv1 (the old +Canadian format), and NTv2 (``.gsb`` - the new Canadian and Australian format). + +Use of grid shifts is specified using the ``nadgrids`` keyword in a coordinate +system definition. For example: + + +:: + + % cs2cs +proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat \ + +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF + -111 50 + EOF + 111d0'2.952"W 50d0'0.111"N 0.000 + +In this case the ``/usr/local/share/proj/ntv1_can.dat`` grid shift file was +loaded, and used to get a grid shift value for the selected point. + +It is possible to list multiple grid shift files, in which case each will be +tried in turn till one is found that contains the point being transformed. + +:: + + cs2cs +proj=latlong +ellps=clrk66 \ + +nadgrids=conus,alaska,hawaii,stgeorge,stlrnc,stpaul \ + +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF + -111 44 + EOF + 111d0'2.788"W 43d59'59.725"N 0.000 + +Skipping Missing Grids +................................................................................ + +The special prefix ``@`` may be prefixed to a grid to make it optional. If it +not found, the search will continue to the next grid. Normally any grid not +found will cause an error. For instance, the following would use the +``ntv2_0.gsb`` file if available (see [[NonFreeGrids]]), otherwise it would +fallback to using the ``ntv1_can.dat`` file. + +:: + + cs2cs +proj=latlong +ellps=clrk66 +nadgrids=@ntv2_0.gsb,ntv1_can.dat \ + +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF + -111 50 + EOF + 111d0'3.006"W 50d0'0.103"N 0.000 + +The null Grid +................................................................................ + +A special ``null`` grid shift file is shift with releases after 4.4.6 (not +inclusive). This file provides a zero shift for the whole world. It may be +listed at the end of a nadgrids file list if you want a zero shift to be +applied to points outside the valid region of all the other grids. Normally if +no grid is found that contains the point to be transformed an error will occur. + +:: + + cs2cs +proj=latlong +ellps=clrk66 +nadgrids=conus,null \ + +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF + -111 45 + EOF + 111d0'3.006"W 50d0'0.103"N 0.000 + + cs2cs +proj=latlong +ellps=clrk66 +nadgrids=conus,null \ + +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF + -111 44 + -111 55 + EOF + 111d0'2.788"W 43d59'59.725"N 0.000 + 111dW 55dN 0.000 + +Downloading and Installing Grids +................................................................................ + +The source distribution of PROJ.4 contains only the ntv1_can.dat file. To get +the set of US grid shift files it is necessary to download an additional +distribution of files from the PROJ.4 site, such as +ftp://ftp.remotesensing.org/pub/proj/proj-nad27-1.1.tar.gz. Overlay it on the +PROJ.4 source distribution, and re-configure, compile and install. The +distributed ASCII .lla files are converted into binary (platform specific) +files that are installed. On windows using the nmake /f makefile.vc nadshift +command in the proj\src directory to build and install these files. + +It appears we can't redistribute the Canadian NTv2 grid shift file freely, +though it is better than the NTv1 file. However, end users can download it for +free from the `NRCan web site +`__. After downloading +it, just dump it in the data directory with the other installed data files +(usually `/usr/local/share/proj`). See [[NonFreeGrids]] for details. + +Caveats +................................................................................ + +* Where grids overlap (such as conus and ntv1_can.dat for instance) the first + found for a point will be used regardless of whether it is appropriate or + not. So, for instance, ```+nadgrids=ntv1_can.dat```,conus would result in + the Canadian data being used for some areas in the northern United States + even though the conus data is the approved data to use for the area. + Careful selection of files and file order is necessary. In some cases + border spanning datasets may need to be pre-segmented into Canadian and + American points so they can be properly grid shifted +* There are additional grids for shifting between NAD83 and various HPGN + versions of the NAD83 datum. Use of these haven't been tried recently so + you may encounter problems. The FL.lla, WO.lla, MD.lla, TN.lla and WI.lla + are examples of high precision grid shifts. Take care! +* Additional detail on the grid shift being applied can be found by setting + the PROJ_DEBUG environment variable to a value. This will result in output + to stderr on what grid is used to shift points, the bounds of the various + grids loaded and so forth +* PROJ.4 always assumes that grids contain a shift **to** NAD83 (essentially + WGS84). Other types of grids might or might not be usable + +Axis orientation +-------------------------------------------------------------------------------- + +Starting in PROJ 4.8.0, the +axis argument can be used to control the axis +orientation of the coordinate system. The default orientation is "easting, +northing, up" but directions can be flipped, or axes flipped using combinations +of the axes in the +axis switch. The values are: + +* "e" - Easting +* "w" - Westing +* "n" - Northing +* "s" - Southing +* "u" - Up +* "d" - Down + +They can be combined in +axis in forms like: + +* ``+axis=enu`` - the default easting, northing, elevation. +* ``+axis=neu`` - northing, easting, up - useful for "lat/long" geographic + coordinates, or south orientated transverse mercator. +* ``+axis=wnu`` - westing, northing, up - some planetary coordinate systems + have "west positive" coordinate systems + +Note that the ``+axis`` argument only applies to coordinate transformations done +through ``pj_transform()`` (so it works with ``cs2cs``, but not with the proj +commandline program). diff --git a/proj4/docs/source/threads.rst b/proj4/docs/source/threads.rst new file mode 100644 index 000000000000..6976162be5e3 --- /dev/null +++ b/proj4/docs/source/threads.rst @@ -0,0 +1,84 @@ +.. _threads: + +================================================================================ +Threads +================================================================================ + +.. contents:: Contents + :depth: 3 + :backlinks: none + + +This page is about efforts to make PROJ.4 thread safe. + +Key Thread Safety Issues +-------------------------------------------------------------------------------- + +* the global pj_errno variable is shared between threads and makes it + essentially impossible to handle errors safely. Being addressed with the + introduction of the projCtx execution context. +* the datum shift using grid files uses globally shared lists of loaded grid + information. Access to this has been made safe in 4.7.0 with the introduction + of a proj.4 mutex used to protect access to these memory structures (see + pj_mutex.c). + +projCtx +-------------------------------------------------------------------------------- + +Primarily in order to avoid having pj_errno as a global variable, a "thread +context" structure has been introduced into a variation of the PROJ.4 API for +the 4.8.0 release. The pj_init() and pj_init_plus() functions now have context +variations called pj_init_ctx() and pj_init_plus_ctx() which take a projections +context. + +The projections context can be created with pj_ctx_alloc(), and there is a +global default context used when one is not provided by the application. There +is a pj_ctx_ set of functions to create, manipulate, query, and destroy +contexts. The contexts are also used now to handle setting debugging mode, and +to hold an error reporting function for textual error and debug messages. The +API looks like: + +:: + + projPJ pj_init_ctx( projCtx, int, char ** ); + projPJ pj_init_plus_ctx( projCtx, const char * ); + + 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 ); + +Multithreaded applications are now expected to create a projCtx per thread +using pj_ctx_alloc(). The context's error handlers, and app data may be +modified if desired, but at the very least each context has an internal error +value accessed with pj_ctx_get_errno() as opposed to looking at pj_errno. + +Note that pj_errno continues to exist, and it is set by pj_ctx_set_errno() (as +well as setting the context specific error number), but pj_errno still suffers +from the global shared problem between threads and should not be used by +multithreaded applications. + +Note that pj_init_ctx(), and pj_init_plus_ctx() will assign the projCtx to the +created projPJ object. Functions like pj_transform(), pj_fwd() and pj_inv() +will use the context of the projPJ for error reporting. + +src/multistresstest.c +-------------------------------------------------------------------------------- + +A small multi-threaded test program has been written (src/multistresstest.c) +for testing multithreaded use of PROJ.4. It performs a series of reprojections +to setup a table expected results, and then it does them many times in several +threads to confirm that the results are consistent. At this time this program +is not part of the builds but it can be built on linux like: + +:: + + gcc -g multistresstest.c .libs/libproj.so -lpthread -o multistresstest + ./multistresstest diff --git a/proj4/html/CMakeLists.txt b/proj4/html/CMakeLists.txt new file mode 100644 index 000000000000..2c0bdc7b420d --- /dev/null +++ b/proj4/html/CMakeLists.txt @@ -0,0 +1,12 @@ +set(HTML_DOC_FILE faq.html + gen_parms.html + index.html + man_cs2cs.html + man_geod.html + man_pj_init.html + man_proj.html + proj_logo.png) + +install(FILES ${HTML_DOC_FILE} + DESTINATION ${DOCDIR} + PERMISSIONS WORLD_READ WORLD_WRITE) diff --git a/proj4/html/faq.html b/proj4/html/faq.html new file mode 100644 index 000000000000..38f6fa3d11a3 --- /dev/null +++ b/proj4/html/faq.html @@ -0,0 +1,227 @@ + + +PROJ.4 - Frequently Asked Questions + + +

PROJ.4 - Frequently Asked Questions

+ + + +

Where can I find the list of projections and their arguments?

+ +There is no simple single location to find all the required information. The +PostScript/PDF documents listed on the main PROJ.4 +page under documentation are the authoritative source but projections and +options are spread over several documents in a form more related to their +order of implementation than anything else. + +The proj command +itself can report the list of projections using the -lp, option, +the list of ellipsoids with the -le option, the list of units with +the -lu option, and the list of built-in datums with the -ld +option.

+ +The GeoTIFF +Projections Pages include most of the common PROJ.4 projections, and +a definition of the projection specific options for each.

+ + + +

How do I do datum shifts between NAD27 and NAD83?

+ +While the nad2nad program can be used in some cases, the cs2cs +is now the preferred mechanism. The following example demonstrates using +the default shift parameters for NAD27 to NAD83:

+ +

+% cs2cs +proj=latlong +datum=NAD27 +to +proj=latlong +datum=NAD83 
+-117 30
+
+

+ +producing:

+ +

+117d0'2.901"W   30d0'0.407"N 0.000
+
+ +

+In order for datum shifting to work properly the various grid shift files +must be available. See below. More details are available in the +General Parameters document.

+ + + +

How do I build/configure PROJ.4 to support datum shifting.

+ +After downloading and unpacking the PROJ.4 source, also download and unpack +the set of datum shift files. This would be a file like + +ftp://ftp.remotesensing.org/pub/proj/proj-datumgrid-1.3.zip. This +file should be unpacked within the proj/nad directory. +Then proceed with the configuration, build and install. This will ensure +that the build system knows about the grid shift files, and applies the +ascii to binary preprocessing step.

+ +On Windows the extra nadshift target must be used. For instance +nmake /f makefile.vc nadshift in the proj/src directory. +

+ +A default build and install on Unix will normally build knowledge of the +directory where the grid shift files are installed into the PROJ.4 library +(usually /usr/local/share/proj). On Windows the library is normally built +thinking that C:\PROJ\NAD is the installed directory for the grid shift files. +If the built in concept of the PROJ.4 data directory is incorrect, the PROJ_LIB +environment can be defined with the correct directory.

+ + + +

How do I debug problems with NAD27/NAD83 datum shifting?

+ +
    +
  1. Verify that you have the binary files (eg. /usr/local/share/proj/conus) +installed on your system. If not, see the previous question. +

    +

  2. Try a datum shifting operation in relative isolation, such as with the +cs2cs command listed above. Do you get reasonable results? If not it is +likely the grid shift files aren't being found. Perhaps you need to define +PROJ_LIB?

    + +

  3. The cs2cs command and the underlying pj_transform() API know how to +do a grid shift as part of a more complex coordinate transformation; however, +it is imperative that both the source and destination coordinate system be +defined with appropriate datum information. That means that implicitly or +explicitly there must be a +datum= clause, a +nadgrids= clause or +a +towgs84= clause. For instance "cs2cs +proj=latlong +datum=NAD27 +to ++proj=latlong +ellps=WGS84" won't work because defining the output coordinate +system as using the ellipse WGS84 isn't the same as defining it to use the +datum WGS84 (use +datum=WGS84). If either the input or output are not +identified as having a datum, the datum shifting (and ellipsoid change) step +is just quietly skipped!

    + +

  4. The PROJ_DEBUG environment can be defined (any value) to force extra +output from +the PROJ.4 library to stderr (the text console normally) with information on +what data files are being opened and in some cases why a transformation fails. +Note that PROJ_DEBUG support is not yet very mature in the PROJ.4 library.

    + +

  5. The "-v" flag to cs2cs can be useful in establishing more detail on +what parameters being used internally for a coordinate system. This will +include expanding the definition of +datum clause.

    + +

+ + + +

How do I use EPSG coordinate system codes with PROJ.4?

+ +There is somewhat imperfect translation between 2d geographic and +projected coordinate system codes and PROJ.4 descriptions of the +coordinate system available in the epsg definition file that +normally lives in the proj/nad directory. If installed (it is +installed by default on Unix), it is possible to use EPSG numbers like this: + +
+% cs2cs -v +init=epsg:26711
+# ---- From Coordinate System ----
+#Universal Transverse Mercator (UTM)
+#       Cyl, Sph
+#       zone= south
+# +init=epsg:26711 +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m
+# +no_defs +nadgrids=conus,ntv1_can.dat
+#--- following specified but NOT used
+# +ellps=clrk66
+# ---- To Coordinate System ----
+#Lat/long (Geodetic)
+#
+# +proj=latlong +datum=NAD27 +ellps=clrk66 +nadgrids=conus,ntv1_can.dat
+
+ +The proj/nad/epsg file can be browsed and searched in a text editor +for coordinate systems. There are known to be problems with some coordinate +systems, and any coordinate systems with odd axes, a non-greenwich prime +meridian or other quirkyness are unlikely to work properly. Caveat Emptor!

+ + + +

How do I use 3 parameter and 7 parameter datum shifting

+ +Datum shifts can be approximated with 3 and 7 parameter transformations. +Their use is more fully described in the +towgs84 discussions.

+ + + + +

Does PROJ.4 work in different international numeric locales?

+ +No. PROJ.4 makes extensive use of sprintf() and atof() internally to translate +numeric values. If a locale is in effect that modifies formatting of +numbers, altering the role of commas and periods in numbers, then PROJ.4 +will not work. This problem is common in some European locales.

+ +On unix-like platforms, this problem can be avoided by forcing the use +of the default numeric locale by setting the LC_NUMERIC environment variable +to C.

+ +eg. +

+$ export LC_NUMERIC=C
+$ proj ...
+
+ + + +

Changing Ellipsoid / Why can't I convert from WGS84 to Virtual Earth Mercator?

+ +The coordinate system definition for Virtual Earth Mercator is as follows, +which uses a sphere as the earth model for the mercator projection. + +
++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 +no_defs
+
+ +But, if you do something like: + +
+cs2cs +proj=latlong +datum=WGS84 
+    +to +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 +no_defs
+
+ +to convert between WGS84 and mercator on the sphere there will be substantial +shifts in the Y mercator coordinates. This is because internally cs2cs is +having to adjust the lat/long coordinates from being on the sphere to being +on the WGS84 datum which has a quite differently shaped ellipsoid.

+ +In this case, and many other cases using spherical projections, the desired +approach is to actually treat the lat/long locations on the sphere as if +they were on WGS84 without any adjustments when using them for converting +to other coordinate systems. The solution is to "trick" PROJ.4 into applying +no change to the lat/long values when going to (and through) WGS84. This +can be accomplished by asking PROJ to use a null grid shift file +for switching from your spherical lat/long coordinates to WGS84.

+ +

+cs2cs +proj=latlong +datum=WGS84 
+    +to +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 +no_defs
+
+ +Note the strategic addition of +nadgrids=@null to the spherical +projection definition.

+ +Similar issues apply with many other datasets distributed with projections +based on a spherical earth model - such as many NASA datasets, and also +(I think) the Google Maps mercator projection.

+ + + +


+ +Requests to add items to the frequently asked questions list + +can be entered in bugzilla.

+ + diff --git a/proj4/html/gen_parms.html b/proj4/html/gen_parms.html new file mode 100644 index 000000000000..d2b8305fbdb4 --- /dev/null +++ b/proj4/html/gen_parms.html @@ -0,0 +1,276 @@ + + +PROJ.4 - General Parameters + + +

PROJ.4 - General Parameters

+ +This document attempts to describe a variety of the PROJ.4 parameters +which can be applied to all, or many coordinate system definitions. This +document does not attempt to describe the parameters particular to particular +projection types. Some of these can be found in the GeoTIFF +Projections +Transform List. The definitative documentation for most parameters +is Gerald's original documentation available from the main PROJ.4 page.

+ +


+

False Easting/Northing

+ +Virtually all coordinate systems allow for the presence of a false easting +(+x_0) and northing (+y_0). Note that these values are always expressed in +meters even if the coordinate system is some other units. Some coordinate +systems (such as UTM) have implicit false easting and northing values.

+ +


+

pm - Prime Meridian

+ +A prime meridian may be declared indicating the offset between the prime +meridian of the declared coordinate system and that of greenwich. A prime +meridian is clared using the "pm" parameter, and may be assigned a symbolic +name, or the longitude of the alternative prime meridian relative to +greenwich.

+ +Currently prime meridian declarations are only utilized by the +pj_transform() API call, not the pj_inv() and pj_fwd() calls. Consequently +the user utility cs2cs does honour prime meridians but the proj +user utility ignores them.

+ +The following predeclared prime meridian names are supported. These +can be listed using the cs2cs argument -lm.

+

+   greenwich 0dE                           
+      lisbon 9d07'54.862"W                 
+       paris 2d20'14.025"E                 
+      bogota 74d04'51.3"E                  
+      madrid 3d41'16.48"W                  
+        rome 12d27'8.4"E                   
+        bern 7d26'22.5"E                   
+     jakarta 106d48'27.79"E                
+       ferro 17d40'W                       
+    brussels 4d22'4.71"E                   
+   stockholm 18d3'29.8"E                   
+      athens 23d42'58.815"E                
+        oslo 10d43'22.5"E                  
+
+ +Example of use. The location long=0, lat=0 in the greenwich based +lat/long coordinates is translated to lat/long coordinates with Madrid +as the prime meridian.

+ +

+ cs2cs +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 +pm=madrid
+0 0                           (input)
+3d41'16.48"E    0dN 0.000     (output)
+
+ +
+

towgs84 - Datum transformation to WGS84

+ +Datum shifts can be approximated by 3 parameter spatial translations (in +geocentric space), or 7 parameter shifts (translation + rotation + scaling). +The parameters to describe this can be described using the towgs84 +parameter.

+ +In the three parameter case, the three arguments are the translations to the +geocentric location in meters.

+ +For instance, the following demonstrates converting from the Greek GGRS87 +datum to WGS84.

+ +

+% cs2cs +proj=latlong +ellps=GRS80 +towgs84=-199.87,74.79,246.62 \
+    +to +proj=latlong +datum=WGS84
+20 35
+20d0'5.467"E    35d0'9.575"N 8.570
+
+ +The EPSG database provides this example for transforming from WGS72 to WGS84 +using an approximated 7 parameter transformation.

+

+% cs2cs +proj=latlong +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.219 \
+    +to +proj=latlong +datum=WGS84
+4 55
+4d0'0.554"E     55d0'0.09"N 3.223
+
+ +The seven parameter case uses delta_x, delta_y, delta_z, +Rx - rotation X, Ry - rotation Y, Rz - rotation Z, +M_BF - Scaling. The three translation parameters are in meters as +in the three parameter case. The rotational parameters are in seconds of +arc. The scaling is apparently the scale change in parts per million.

+ +A more complete discussion of the 3 and 7 parameter transformations can be +found in the EPSG database (trf_method's 9603 and 9606). Within PROJ.4 +the following calculations are used to apply the towgs84 transformation +(going to WGS84). The x, y and z coordinates are in geocentric coordinates. + +Three parameter transformation (simple offsets): + +

+  x[io] = x[io] + defn->datum_params[0];
+  y[io] = y[io] + defn->datum_params[1];
+  z[io] = z[io] + defn->datum_params[2];
+
+ +Seven parameter transformation (translation, rotation and scaling): + +
+  #define Dx_BF (defn->datum_params[0])
+  #define Dy_BF (defn->datum_params[1])
+  #define Dz_BF (defn->datum_params[2])
+  #define Rx_BF (defn->datum_params[3])
+  #define Ry_BF (defn->datum_params[4])
+  #define Rz_BF (defn->datum_params[5])
+  #define M_BF  (defn->datum_params[6])
+
+  x_out = M_BF*(       x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF;
+  y_out = M_BF*( Rz_BF*x[io] +       y[io] - Rx_BF*z[io]) + Dy_BF;
+  z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] +       z[io]) + Dz_BF;
+
+ +Note that EPSG method 9607 (coordinate frame rotation) coefficients can be +converted to EPSG method 9606 (position vector 7-parameter) supported by +PROJ.4 by reversing the sign of the rotation vectors. The methods are +otherwise the same.

+ +


+

nadgrids - Grid Based Datum Adjustments

+ +In many places (notably North America and Austrialia) national geodetic +organizations provide grid shift files for converting between different +datums, such as NAD27 to NAD83. These grid shift files include a shift to +be applied at each grid location. Actually grid shifts are normally computed +based on an interpolation between the containing four grid points.

+ +PROJ.4 currently supports use of grid shift files for shifting between +datums and WGS84 under some circumstances. The grid shift table formats are +ctable (the binary format produced by the PROJ.4 nad2bin program), +NTv1 (the old Canadian format), and NTv2 (.gsb - the new Canadian and +Australian format).

+ +Use of grid shifts is specified using the "nadgrids" keyword in a coordinate +system definition. For example:

+ +

+% cs2cs +proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat \
+    +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF
+-111 50 
+EOF
+111d0'2.952"W   50d0'0.111"N 0.000
+
+ +In this case the /usr/local/share/proj/ntv1_can.dat grid shift file +was loaded, and used to get a grid shift value for the selected point.

+ +It is possible to list multiple grid shift files, in which case each will be +tried in turn till one is found that contains the point being transformed.

+ +

+% cs2cs +proj=latlong +ellps=clrk66 \
+          +nadgrids=conus,alaska,hawaii,stgeorge,stlrnc,stpaul \
+    +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF
+-111 44
+EOF
+111d0'2.788"W   43d59'59.725"N 0.000
+
+ +

Skipping Missing Grids

+ +The special prefix @ may be prefixed to a grid to make it optional. If +it not found, the search will continue to the next grid. Normally any +grid not found will cause an error. For instance, the following would +use the ntv2_0.gsb file if available, otherwise it would fallback to using +the ntv1_can.dat file.

+ +

+% cs2cs +proj=latlong +ellps=clrk66 +nadgrids=@ntv2_0.gsb,ntv1_can.dat \
+    +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF
+-111 50 
+EOF
+111d0'3.006"W   50d0'0.103"N 0.000
+
+ +

The null Grid

+ +A special null grid shift file is shift with releases after 4.4.6 (not +inclusive). This file provides a zero shift for the whole world. It may +be listed at the end of a nadgrids file list if you want a zero shift to +be applied to points outside the valid region of all the other grids. +Normally if no grid is found that contains the point to be transformed an +error will occur.

+ +

+% cs2cs +proj=latlong +ellps=clrk66 +nadgrids=conus,null \
+    +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF
+-111 45
+EOF
+111d0'3.006"W   50d0'0.103"N 0.000
+
+ +
+% cs2cs +proj=latlong +ellps=clrk66 +nadgrids=conus,null \
+    +to +proj=latlong +ellps=GRS80 +datum=NAD83 << EOF
+-111 44
+-111 55
+EOF
+111d0'2.788"W   43d59'59.725"N 0.000
+111dW   55dN 0.000
+
+ +

Downloading and Installing Grids

+ +The source distribution of PROJ.4 contains only the ntv1_can.dat file. To +get the set of US grid shift files it is necessary to download an additional +distribution of files from the PROJ.4 site, such as + +proj-nad27-1.1.tar.gz. Overlay it on the PROJ.4 source distribution, +and re-configure, compile and install. The distributed ASCII .lla files +are converted into binary (platform specific) files that are installed. +On windows using the nmake /f makefile.vc nadshift command in +the proj\src directory to build and install these files.

+ +It appears we can't redistribute the Canadian NTv2 grid shift file freely, +though it is better than the NTv1 file. However, end users can download it +for free from the NRCan web site at + +http://www.geod.nrcan.gc.ca/software/ntv2_e.php. After +downloading it, just dump it in the data directory with the other +installed data files (usually /usr/local/share/proj).

+ +

Caveats

+ +
    + +
  1. Where grids overlap (such as conus and ntv1_can.dat for instance) the +first found for a point will be used regardless of whether it is appropriate +or not. So, for instance, +nadgrids=ntv1_can.dat,conus would result in the +canadian data being used for some areas in the northern United States even +though the conus data is the approved data to use for the area. Careful +selection of files and file order is necessary. In some cases border spanning +datasets may need to be pre-segmented into Canadian and American points +so they can be properly grid shifted.

    + +

  2. There are additional grids for shifting between NAD83 and various +HPGN versions of the NAD83 datum. Use of these haven't been tried recently +so you may encounter problems. The FL.lla, WO.lla, MD.lla, TN.lla and WI.lla +are examples of high precision grid shifts. Take care!

    + +

  3. Additional detail on the grid shift being applied can be found by +setting the PROJ_DEBUG environment variable to a value. This will result +in output to stderr on what grid is used to shift points, the bounds of the +various grids loaded and so forth.

    + +

  4. PROJ.4 always assumes that grids contain a shift to NAD83 +(essentially WGS84). Other types of grids might or might not be usable.

    + +

+ + + + + + + + + + diff --git a/proj4/html/index.html b/proj4/html/index.html new file mode 100644 index 000000000000..e56f5767454a --- /dev/null +++ b/proj4/html/index.html @@ -0,0 +1,13 @@ + + + +redirect + + + +This page has moved. You will be automatically redirected to its new location. +If you aren't forwarded to the new page, +click here. + + diff --git a/proj4/html/man_cs2cs.html b/proj4/html/man_cs2cs.html new file mode 100644 index 000000000000..5454714b5ce8 --- /dev/null +++ b/proj4/html/man_cs2cs.html @@ -0,0 +1,302 @@ +Content-type: text/html; charset=UTF-8 + + +Man page of CS2CS + +

CS2CS

+Section: User Commands (1)
Updated: 2000/03/21 Rel. 4.4
Index +Return to Main Contents
+ +  +

NAME

+ +cs2cs - cartographic coordinate system filter +  +

SYNOPSIS

+ +cs2cs + +[ +-eEfIlrstvwW + +[ +args + +] ] [ ++opts[=arg] + +] +
+ +
      [ +to [+opts[=arg]] ] +file[s] +  +

DESCRIPTION

+ +Cs2cs + +performs transformation between the source and destination cartographic +coordinate system on a set of input points. The coordinate system +transformation can include translation between projected and geographic +coordinates as well as the application of datum shifts. +

+ +The following control parameters can appear in any order: +

+
-I + +
+method to specify inverse translation, convert from +to coordinate +system to the primary coordinate system defined. +
-ta + +
+A + +specifies a character employed as the first character to denote +a control line to be passed through without processing. +This option applicable to ascii input only. +(# is the default value). +
-e string + +
+String + +is an arbitrary string to be output if an error is detected during +data transformations. +The default value is: *\t*. +Note that if the +-b, + +-i + +or +-o + +options are employed, an error is returned as HUGE_VAL +value for both return values. +
-E + +
+causes the input coordinates to be copied to the output line +prior to printing the converted values. +
-l[p|P|=|e|u|d]id + +
+List projection identifiers with +-l, + +-lp + +or +-lP (expanded) + +that can be selected with ++proj. + +-l=id + +gives expanded description of projection +id. + +List ellipsoid identifiers with +-le, + +that can be selected with ++ellps, + +-lu + +list of cartesian to meter conversion factors +that can be selected with ++units + +or +-ld + +list of datums that can be selected with ++datum. + +
-r + +
+This options reverses the order of the +expected input from longitude-latitude or x-y to latitude-longitude or y-x. +
-s + +
+This options reverses the order of the +output from x-y or longitude-latitude to y-x or latitude-longitude. +
-f format + +
+Format + +is a +printf + +format string to control the form of the output values. +For inverse projections, the output will be in degrees when this option +is employed. +If a format is specified for inverse projection the +output data will be in decimal degrees. +The default format is "%.2f" for forward projection and DMS +for inverse. +
-[w|W]n + +
+N + +is the number of significant fractional digits to employ for +seconds output (when the option is not specified, +-w3 + +is assumed). +When +-W + +is employed the fields will be constant width and with leading zeroes. +
-v + +
+causes a listing of cartographic control parameters tested for and +used by the program to be printed prior to input data. +
+

+ +The ++args + +run-line arguments are associated with cartographic parameters +and usage varies with projection and for a complete description see +Cartographic Projection Procedures for the UNIX Environment---A User's Manual + +and supplementary documentation for Release 4. +

+ +The cs2cs program requires two coordinate system definitions. The +first (or primary is defined based on all projection parameters not +appearing after the +to argument. All projection parameters +appearing after the +to argument are considered the definition +of the second coordinate system. If there is no second coordinate system +defined, a geographic coordinate system based on the datum and ellipsoid of +the source coordinate system is assumed. Note that the source and destination +coordinate system can both be projections, both be geographic, or one of +each and may have the same or different datums. +

+ +Additional projection control parameters may be contained in two +auxiliary control files: +the first is optionally referenced with the ++init=file:id + +and the second is always processed after the name +of the projection has been established from either the run-line +or the contents of ++init + +file. +The environment parameter +PROJ_LIB + +establishes the default directory for a file reference without +an absolute path. This is also used for supporting files like +datum shift files. +

+ +One or more +files + +(processed in left to right order) +specify the source of data to be transformed. +A - will specify the location of processing standard input. +If no files are specified, the input is assumed to be from +stdin. + +For input data the two data values must be in the +first two white space separated fields and +when both input and output are ASCII all trailing portions +of the input line are appended to the output line. +

+ +Input geographic data +(longitude and latitude) must be in DMS or decimal degrees format and input +cartesian data must be in units consistent with the ellipsoid +major axis or sphere radius units. +Output geographic coordinates will normally be in DMS format (use +-f %.12f + +for decimal degrees with 12 decimal places), while +projected (cartesian) coordinates will be in linear (meter, feet) units. + +  +

EXAMPLE

+ +The following script +
+
 cs2cs +proj=latlong +datum=NAD83  +
       +to +proj=utm +zone=10 +datum=NAD27 -r <<EOF +
 45d15'33.1"    111.5W
+
 45d15.551666667N       -111d30
+
 +45.25919444444        111d30'000w
+
 EOF
+
+ +will transform the input NAD83 geographic coordinates into NAD27 coordinates +in the UTM projection with zone 10 selected. +The geographic values of this example are equivalent and meant +as examples of various forms of DMS input. +The x-y output data will appear as three lines of: +
+
 1402285.99      5076292.42 0.000 +
+ +  +

SEE ALSO

+ +proj(1), + +
+ +Cartographic Projection Procedures for the UNIX Environment---A User's Manual, + +(Evenden, 1990, Open-file report 90-284). +
+ +Map Projections Used by the U. S. Geological Survey + +(Snyder, 1984, +USGS Bulletin 1532). +
+ +Map Projections---A Working Manual + +(Snyder, 1988, USGS Prof. Paper 1395). +
+ +An Album of Map Projections + +(Snyder & Voxland, 1989, USGS Prof. Paper 1453). +  +

HOME PAGE

+ +https://github.com/OSGeo/proj.4/wiki +

+ +


+ 

Index

+
+
NAME
+
SYNOPSIS
+
DESCRIPTION
+
EXAMPLE
+
SEE ALSO
+
HOME PAGE
+
+
+This document was created by +man2html, +using the manual pages.
+Time: 20:43:10 GMT, February 18, 2016 + + diff --git a/proj4/html/man_geod.html b/proj4/html/man_geod.html new file mode 100644 index 000000000000..ec3e42861200 --- /dev/null +++ b/proj4/html/man_geod.html @@ -0,0 +1,305 @@ +Manpage of GEOD + +

GEOD

+Section: User Commands (1)
Updated: 2000/03/21 Rel. 4.4
Index +Return to Main Contents
+ +  +

NAME

+ +geod - direct geodesic computations +
+ +invgeod - inverse geodesic computations +  +

SYNOPSIS

+ +geod + ++ellps=<ellipse> + +[ +-afFIlptwW + +[ +args + +] ] [ ++args + +] +file[s] +
+ +invgeod + ++ellps=<ellipse> + +[ +-afFIlptwW + +[ +args + +] ] [ ++args + +] +file[s] +  +

DESCRIPTION

+ +Geod + +(direct) and +invgeod + +(inverse) +perform geodesic (``Great Circle'') computations for determining +latitude, longitude and back azimuth of a terminus point +given a initial point latitude, longitude, azimuth and distance (direct) or +the forward and back azimuths and distance between an initial and +terminus point latitudes and longitudes (inverse). +

+ +The following runline control parameters can appear in any order: +

+
-I + +
+Specifies that the inverse geodesic computation is to be performed. +May be used with execution of +goed + +as an alternative to +invgeod + +execution. +
-a + +
+Latitude and longitudes of the initial and terminal points, +forward and back azimuths and distance are output. +
-ta + +
+A + +specifies a character employed as the first character to denote +a control line to be passed through without processing. +
-le + +
+Gives a listing of all the ellipsoids that may be selected with the ++ellps= + +option. +
-lu + +
+Gives a listing of all the units that may be selected with the ++units= + +option. +
-[f|F] format + +
+Format + +is a +printf + +format string to control the output form of the geographic coordinate values +(f) or distance value (F). +The default mode is DMS for geographic coordinates and "%.3f" for distance. +
-[w|W]n + +
+N + +is the number of significant fractional digits to employ for +seconds output (when the option is not specified, +-w3 + +is assumed). +When +-W + +is employed the fields will be constant width with leading zeroes. +
-p + +
+This option causes the azimuthal values to be output as unsigned +DMS numbers between 0 and 360 degrees. Also note -f. +
+

+ +The ++args + +run-line arguments are associated with geodetic parameters +for specifying the ellipsoidal or sphere to use. +See +proj + +documentation for full list of these parameters and contrl. +The options are processed in left to right order +from the run line. +Reentry of an option is ignored with the first occurance assumed to +be the desired value. +

+ +One or more +files + +(processed in left to right order) +specify the source of data to be transformed. +A - will specify the location of processing standard input. +If no files are specified, the input is assumed to be from +stdin. + +

+ +For direct determinations input data must be in latitude, +longitude, azimuth and distance order and output will be +latitude, longitude and back azimuth of the terminus point. +Latitude, longitude of the initial and terminus point are +input for the inverse mode and respective forward and back +azimuth from the initial and terminus points are output along +with the distance between the points. +

+ +Input geographic coordinates +(latitude and longitude) and azimuthal data must be in DMS format and input +distance data must be in units consistent with the ellipsoid +major axis or sphere radius units. +Output geographic coordinates will be in DMS +(if the +-f + +switch is not employed) to 0.001" +with trailing, zero-valued minute-second fields deleted. +Output distance data will be in the same units as the ellipsoid or +sphere radius. +

+ +The Earth's ellipsoidal figure may be selected in the same +manner as program +proj + +by using ++ellps=, +a=, +es=, + +etc. +

+ +Geod + +may also be used to determine intermediate points along either +a geodesic line between two points or along an arc of specified distance +from a geographic point. +In both cases an initial point must be specified with ++lat_1=lat + +and ++lon_1=lon + +parameters and either a terminus point ++lat_2=lat + +and ++lon_2=lon + +or a distance and azimuth from the initial point with ++S=distance + +and ++A=azimuth + +must be specified. +

+ +If points along a geodesic are to be determined then either ++n_S=integer + +specifying the number of intermediate points and/or ++del_S=distance + +specifying the incremental distance between points must be specified. +

+ +To determine points along an arc equidistant from the initial point both ++del_A=angle + +and ++n_A=integer + +must be specified which determine the respective angular increments +and number of points to be determined. + +  +

EXAMPLE

+ +The following script determines the geodesic azimuths and distance in +U.S. stature miles from Boston, MA, to Portland, OR: +
+
 geod +ellps=clrk66 <<EOF -I +units=us-mi +
 42d15'N 71d07'W 45d31'N 123d41'W +
 EOF
+
+ +which gives the results: +
+
 -66d31'50.141"   75d39'13.083"   2587.504 +
+ +where the first two values are the +azimuth from Boston to Portland, the back azimuth from Portland to +Boston followed by the distance. +

+ +An example of forward geodesic use is to use the Boston location and determine +Portland's location by azimuth and distance: +

+
 geod +ellps=clrk66 <<EOF +units=us-mi +
 42d15'N 71d07'W -66d31'50.141" 2587.504 +
 EOF
+
+ +which gives: +
+
 45d31'0.003"N   123d40'59.985"W 75d39'13.094" +
+ +Note: lack of precision in the distance value compromises +the precision of the Portland location. +  +

SEE ALSO

+ +Thomas, P.D., 1970, +Spheroidal Geodesics, Reference Systems & Local Geometry: + +U.S. Naval Oceanographic Office, S-138. +  +

HOME PAGE

+ +http://www.remotesensing.org/proj +

+ +


+ 

Index

+
+
NAME
+
SYNOPSIS
+
DESCRIPTION
+
EXAMPLE
+
SEE ALSO
+
HOME PAGE
+
+
+This document was created by +man2html, +using the manual pages.
+Time: 13:14:56 GMT, October 14, 2005 + + diff --git a/proj4/html/man_pj_init.html b/proj4/html/man_pj_init.html new file mode 100644 index 000000000000..9e3c73e030d5 --- /dev/null +++ b/proj4/html/man_pj_init.html @@ -0,0 +1,157 @@ +Manpage of PJ_INIT + +

PJ_INIT

+Section: Misc. Reference Manual Pages (3U)
Updated: 2001/04/05 Rel. 4.4
Index +Return to Main Contents
+ + + +  +

NAME

+ +pj_init - initialize cartographic projection +
+ +pj_init_plus - initialize cartographic projection +
+ +pj_fwd - forward cartographic projection +
+ +pj_inv - inverse cartographic projection +
+ +pj_transform - transform between coordinate systems +
+ +pj_free - de-initialize projection +  +

SYNOPSIS

+ +
+#include <proj_api.h>
+
+projPJ pj_init(int argc, char **argv)
+
+projPJ pj_init_plus(const char *defn)
+
+projUV pj_fwd(projUV val, projPJ proj)
+
+projUV pj_inv(projUV val, projPJ proj)
+
+int pj_transform(projPJ src_cs, projPJ dst_cs, long point_count, 
+                 double *x, double *y, double *z)
+               
+void pj_free(projPJ proj)
+
+
  +

DESCRIPTION

+ +Procedure pj_init selects and initializes a cartographic projection +with its argument control parameters. +Argc is the number of elements in the array of control strings +argv that each contain individual cartographic control keyword +assignments (+ proj arguments). +The list must contain at least the proj=projection and +Earth's radius or elliptical parameters. +If the initialization of the projection is successful a valid +address is returned otherwise a NULL value. +

+The pj_init_plus function operates similarly to pj_init but +takes a single string containing the definition, with each parameter +prefixed with a plus sign. For example "+proj=utm +zone=11 +ellps=WGS84". +

+Once initialization is performed either forward or inverse +projections can be performed with the returned value of pj_init +used as the argument proj. +The argument structure projUV values u and v contain +respective longitude and latitude or x and y. +Latitude and longitude are in radians. +If a projection operation fails, both elements of projUV are +set to HUGE_VAL (defined in math.h). +

+Note: all projections have a forward mode, but some do not have +an inverse projection. +If the projection does not have an inverse the projPJ structure element +inv will be NULL. +

+The pj_transform function may be used to transform points between +the two provided coordinate systems. In addition to converting between +cartographic projection coordinates and geographic coordinates, this function +also takes care of datum shifts if possible between the source and destination +coordinate system. Unlike pj_fwd and pj_inv it is also allowable +for the coordinate system definitions (PJ *) to be geographic coordinate +systems (defined as +proj=latlong). The x, y and z arrays +contain the input values of the points, and are replaced with the output +values. The function returns zero on success, or the error number (also in +pj_errno) on failure. +

+Memory associated with the projection may be freed with pj_free. +  +

EXAMPLE

+ +The following program reads latitude and longitude values in decimal +degress, performs Mercator projection with a Clarke 1866 ellipsoid and +a 33° latitude of true scale and prints the projected +cartesian values in meters: +
+
+#include <proj_api.h>
+
+main(int argc, char **argv) {
+        char *args[] = { "proj=merc", "ellps=clrk66", "lat_ts=33" };
+        projUV p;
+        projPJ pj;
+
+        if (!(pj = pj_init(3, args)))
+           exit(1);
+        while (scanf("%lf %lf", &p.v, &p.u) == 2) {
+           p.u *= DEG_TO_RAD;
+           p.v *= DEG_TO_RAD;
+           p = pj_fwd(p, pj);
+           printf("%.2f\t%.2f\n", p.u, p.v);
+        }
+        exit(0);
+} 
+
+
+ +  +

LIBRARY

+ +libproj.a - library of projections and support procedures +  +

SEE ALSO

+ +proj(1U), + +
+ +Cartographic Projection Procedures for the UNIX Environment---A User's Manual, + +(Evenden, 1990, Open-file report 90-284). +  +

HOME PAGE

+ +http://www.remotesensing.org/proj +

+

+ +


+ 

Index

+
+
NAME
+
SYNOPSIS
+
DESCRIPTION
+
EXAMPLE
+
LIBRARY
+
SEE ALSO
+
HOME PAGE
+
+
+This document was created by +man2html, +using the manual pages.
+Time: 13:14:22 GMT, October 14, 2005 + + diff --git a/proj4/html/man_proj.html b/proj4/html/man_proj.html new file mode 100644 index 000000000000..79658d3175d1 --- /dev/null +++ b/proj4/html/man_proj.html @@ -0,0 +1,447 @@ +Content-type: text/html; charset=UTF-8 + + +Man page of PROJ + +

PROJ

+Section: User Commands (1)
Updated: 2000/03/21 Rel. 4.4
Index +Return to Main Contents
+ +  +

NAME

+ +proj - forward cartographic projection filter +
+ +invproj - inverse cartographic projection filter +  +

SYNOPSIS

+ +proj + +[ +-bceEfiIlmorsStTvVwW + +[ +args + +] ] [ ++args + +] +file[s] +
+ +invproj + +[ +-bceEfiIlmorsStTwW + +[ +args + +] ] [ ++args + +] +file[s] +  +

DESCRIPTION

+ +Proj + +and +invproj + +perform respective forward and inverse transformation of cartographic data +to or from cartesian data with a wide range of selectable projection functions. +

+ +The following control parameters can appear in any order: +

+
-b + +
+Special option for binary coordinate data input and output +through standard input and standard output. +Data is assumed to be in system type +double + +floating point words. +This option is to be used when +proj + +is a +son + +process and allows bypassing formatting operations. +
-i + +
+Selects binary input only (see +-b option). + +
-I + +
+alternate method to specify inverse projection. +Redundant when used with +invproj. + +
-o + +
+Selects binary output only (see +-b option). + +
-ta + +
+A + +specifies a character employed as the first character to denote +a control line to be passed through without processing. +This option applicable to ascii input only. +(# is the default value). +
-e string + +
+String + +is an arbitrary string to be output if an error is detected during +data transformations. +The default value is: *\t*. +Note that if the +-b, + +-i + +or +-o + +options are employed, an error is returned as HUGE_VAL +value for both return values. +
-E + +
+causes the input coordinates to be copied to the output line +prior to printing the converted values. +
-l[p|P|=|e|u|d]id + +
+List projection identifiers with +-l, + +-lp + +or +-lP (expanded) + +that can be selected with ++proj. + +-l=id + +gives expanded description of projection +id. + +List ellipsoid identifiers with +-le, + +that can be selected with ++ellps, + +-lu + +list of cartesian to meter conversion factors +that can be selected with ++units + +or +-ld + +list of datums that can be selected with ++datum. + +
-r + +
+This options reverses the order of the +expected input from longitude-latitude or x-y to latitude-longitude or y-x. +
-s + +
+This options reverses the order of the +output from x-y or longitude-latitude to y-x or latitude-longitude. +
-S + +
+Causes estimation of +meridinal + +and +parallel + +scale factors, +area + +scale factor and +angular distortion, + +and +maximum + +and +minimum + +scale factors to be listed between <> for each input point. +For conformal projections meridinal and parallel scales factors +will be equal and angular distortion zero. +Equal area projections will have an area factor of 1. +
-m mult + +
+The cartesian data may be scaled by the +mult + +parameter. +When processing data in a forward projection mode the +cartesian output values are multiplied by +mult + +otherwise the input cartesian values are divided by +mult + +before inverse projection. +If the first two characters of +mult + +are 1/ or 1: then the reciprocal value of +mult + +is employed. +
-f format + +
+Format + +is a +printf + +format string to control the form of the output values. +For inverse projections, the output will be in degrees when this option +is employed. +The default format is "%.2f" for forward projection and DMS +for inverse. +
-[w|W]n + +
+N + +is the number of significant fractional digits to employ for +seconds output (when the option is not specified, +-w3 + +is assumed). +When +-W + +is employed the fields will be constant width and with leading zeroes. +
-v + +
+causes a listing of cartographic control parameters tested for and +used by the program to be printed prior to input data. +Should not be used with the +-T + +option. +
-V + +
+This option causes an expanded annotated listing of the characteristics +of the projected point. +-v is implied with this option. + +
-T ulow,uhi,vlow,vhi,res[,umax,vmax] + +
+This option creates a set of bivariate Chebyshev polynomial +coefficients that approximate the selected cartographic projection on +stdout. + +The values +low + +and +hi + +denote the range of the input where the +u + +or +v + +prefixes apply to respective longitude-x or latitude-y +depending upon whether a forward or inverse projection is selected. +Res + +is an integer number specifying the power of 10 precision of the +approximation. +For example, a +res + +of -3 specifies an approximation with an accuracy better than .001. +Umax, + +and +vmax + +specify maximum degree of the polynomials (default: 15). +See also: +fproj(1). + +
+

+ +The ++args + +run-line arguments are associated with cartographic parameters +and usage varies with projection and for a complete description see +Cartographic Projection Procedures for the UNIX Environment---A User's Manual + +and supplementary documentation for Release 4. +

+ +Additional projection control parameters may be contained in two +auxiliary control files: +the first is optionally referenced with the ++init=file:id + +and the second is always processed after the name +of the projection has been established from either the run-line +or the contents of ++init + +file. +The environment parameter +PROJ_LIB + +establishes the default directory for a file reference without +an absolute path. This is also used for supporting files like +datum shift files. +

+ +One or more +files + +(processed in left to right order) +specify the source of data to be transformed. +A - will specify the location of processing standard input. +If no files are specified, the input is assumed to be from +stdin. + +For ASCII input data the two data values must be in the +first two white space separated fields and +when both input and output are ASCII all trailing portions +of the input line are appended to the output line. +

+ +Input geographic data +(longitude and latitude) must be in DMS format and input +cartesian data must be in units consistent with the ellipsoid +major axis or sphere radius units. +Output geographic coordinates will be in DMS +(if the +-w + +switch is not employed) and precise to 0.001" +with trailing, zero-valued minute-second fields deleted. +  +

EXAMPLE

+ +The following script +
+
 proj +proj=utm +lon_0=112w +ellps=clrk66 -r <<EOF +
 45d15'33.1"    111.5W
+
 45d15.551666667N       -111d30
+
 +45.25919444444        111d30'000w
+
 EOF
+
+ +will perform UTM forward projection with a standard UTM +central meridian nearest longitude 112°W. +The geographic values of this example are equivalent and meant +as examples of various forms of DMS input. +The x-y output data will appear as three lines of: +
+
 460769.27      5011648.45
+
+ +  +

OTHER PROGRAMS

+ +

+ +The proj program is limited to converting between geographic and +projection coordinates within one datum. +

+ +The cs2cs program operates +similarly, but allows translation between any pair of definable coordinate +systems, including support for datum translation. +

+ +The geod program provides the ability to compute geodesic (Great +Circle) computations. +  +

SEE ALSO

+ +cs2cs(1), geod(1), pj_init(3), + +
+ +Cartographic Projection Procedures for the UNIX Environment---A User's Manual, + +(Evenden, 1990, Open-file report 90-284). +
+ +Map Projections Used by the U. S. Geological Survey + +(Snyder, 1984, +USGS Bulletin 1532). +
+ +Map Projections---A Working Manual + +(Snyder, 1988, USGS Prof. Paper 1395). +
+ +An Album of Map Projections + +(Snyder & Voxland, 1989, USGS Prof. Paper 1453). +  +

HOME PAGE

+ +https://github.com/OSGeo/proj.4/wiki +

+ +


+ 

Index

+
+
NAME
+
SYNOPSIS
+
DESCRIPTION
+
EXAMPLE
+
OTHER PROGRAMS
+
SEE ALSO
+
HOME PAGE
+
+
+This document was created by +man2html, +using the manual pages.
+Time: 20:44:57 GMT, February 18, 2016 + + diff --git a/proj4/html/proj_logo.png b/proj4/html/proj_logo.png new file mode 100644 index 000000000000..92d5acb6210a Binary files /dev/null and b/proj4/html/proj_logo.png differ diff --git a/proj4/jniwrap/Makefile.am b/proj4/jniwrap/Makefile.am new file mode 100644 index 000000000000..595093f62e2e --- /dev/null +++ b/proj4/jniwrap/Makefile.am @@ -0,0 +1,8 @@ +EXTRA_DIST = build.xml doxygen.cfg README + +SUBDIRS = org + +install-data-local: + echo In jniwrap + + diff --git a/proj4/jniwrap/README b/proj4/jniwrap/README new file mode 100644 index 000000000000..a7f4efc5aa3c --- /dev/null +++ b/proj4/jniwrap/README @@ -0,0 +1,128 @@ + -------------------- J P R O J . 4 -------------------- + +This is the second release of JNI wrappers for the main proj4 functions. + +PLEASE read the following information. + +The first release of JNI wrappers were created by: + + http://www.hydrologis.com + +For more information regarding the current release please see the web page at: + + http://www.geoapi.org/geoapi-proj4/ + + --------------------------------------------------- + + +What is "Proj.4 wrapper": +------------- + +"Proj.4 wrapper" is a small library of Java classes that wrap a few Proj.4 functions by +using the Java Native Interface (JNI). The main Java class is org.proj4.PJ. + + +Compilation: +------------- + +To compile the native part, configure has to be run in the proj directory like this: + + CFLAGS=-Iinclude2 ./configure --with-jni=include1 + +where + + include1 = folder in which the header file jni.h resides (usually $JAVA_HOME/include) + include2 = folder in which the header file jni_md.h resides (usually $JAVA_HOME/include/linux or whatever) + +On MacOS, those two folders are /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/include/ + + +The java part is compiled by running ant inside the "jniwrap" folder. +This will compile the classes and archive them in a jar library. +It applies to Linux, Macos and Windows (and virtually to every system +supporting java). + + +Requirements: +------------- + +Beyond the ones already put by Proj.4, you need: +- JSE 1.5+, the Java standard development kit version 1.5 or above +- Ant, to run the build +- Doxygen for the documentation generation + + +Documentation: +-------------- + +The documentation is held inside the code and can be retrieved by running +doxygen inside the folder jniwrap. This will create the HTML format +documentation inside of jniwrap/docs + +The standard way to achive this is to use an Ant target: + + ant do_make_help + + +License: +-------- + +GPL for the first release +Proj.4 license for the second release. + + +Authors: +-------- + +Andrea Antonello (andrea.antonello@hydrologis.com) +Martin Desruisseaux (martin.desruisseaux@geomatys.fr) + + +Usage & a fast example: +----------------------- + +The jproj.jar is all is needed to implement proj support in java applications. +The whole job is done by the proj4, so there are just a couple of functions that +be used. + +The best way is to see everything through an example. +In the following example we create two Coordinate System and transform 3 points. +The Coordinate System and the points are hard-coded for simplicity. Of course, +real applications would read them from a file or other data source. + +________________________________________________________________________________ +import org.proj4.*; +import java.util.Arrays; + + +/** + * Converts coordinates from EPSG:32632 (WGS 84 / UTM zone 32N) to WGS84, + * then prints the result to the standard output stream. + */ +public class Main { + public static void main(String[] args) throws PJException { + PJ sourcePJ = new PJ("+init=epsg:32632"); // (x,y) axis order + PJ targetPJ = new PJ("+proj=latlong +datum=WGS84"); // (λ,φ) axis order + double[] coordinates = { + 500000, 0, // First coordinate + 400000, 100000, // Second coordinate + 600000, -100000 // Third coordinate + }; + sourcePJ.transform(targetPJ, 2, coordinates, 0, 3); + System.out.println(Arrays.toString(coordinates)); + } +} +________________________________________________________________________________ + +compile the Main code: +we assume that proj was compiled with the right flag to support jproj. +Therefore we have a library called jproj.jar. +Thus we compile the Main.java with the command: + +javac -classpath /jproj.jar Main.java + +and execute the created test case with: + +java -cp .:/jproj.jar -Djava.library.path= Main + +That's it, enjoy! diff --git a/proj4/jniwrap/build.xml b/proj4/jniwrap/build.xml new file mode 100644 index 000000000000..2888a1ec3cdb --- /dev/null +++ b/proj4/jniwrap/build.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + Compilation finished... + + + + + + + Creating folder structure... + + + + + + + + + Compiling the java code... + + + + + + + + + + + + + Creating jni headers... + + + + + + + + Compiling libraries... + + + + + + + + + + + + + + + + + + + Creating help files... + + + + + + + + + + Cleaning up... + + + + + + diff --git a/proj4/jniwrap/doxygen.cfg b/proj4/jniwrap/doxygen.cfg new file mode 100644 index 000000000000..a46a8bb81100 --- /dev/null +++ b/proj4/jniwrap/doxygen.cfg @@ -0,0 +1,1719 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = JPROJ4 + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./docs/ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = NO + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = NO + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = YES + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = NO + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= NO + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../src/jniproj.c \ + org/ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.java \ + *.c \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = NO + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = NO + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/proj4/jniwrap/org/Makefile.am b/proj4/jniwrap/org/Makefile.am new file mode 100644 index 000000000000..f07adff1e8b0 --- /dev/null +++ b/proj4/jniwrap/org/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = proj4 + diff --git a/proj4/jniwrap/org/proj4/Makefile.am b/proj4/jniwrap/org/proj4/Makefile.am new file mode 100644 index 000000000000..665fc39de3fb --- /dev/null +++ b/proj4/jniwrap/org/proj4/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = PJ.java PJException.java package-info.java diff --git a/proj4/jniwrap/org/proj4/PJ.java b/proj4/jniwrap/org/proj4/PJ.java new file mode 100644 index 000000000000..f82fe07cd531 --- /dev/null +++ b/proj4/jniwrap/org/proj4/PJ.java @@ -0,0 +1,292 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Java/JNI wrappers for PROJ.4 API. + * Author: Martin Desruisseaux + * + ****************************************************************************** + * Copyright (c) 2011, Open Geospatial Consortium, Inc. + * + * 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. + ***************************************************************************** + * This file is a copy of a file developed in the GeoAPI "Proj.4 binding" + * module (http://www.geoapi.org/geoapi-proj4/index.html). If this file is + * modified, please consider synchronizing the changes with GeoAPI. + */ +package org.proj4; + + +/** + * Wraps the Proj4 {@code PJ} native data structure. + * Almost every methods defined in this class are native methods delegating the work to the + * Proj.4 library. This class is the only place where such native methods are defined. + *

+ * In the Proj.4 library, the {@code PJ} structure aggregates in a single place information usually + * splitted in many different ISO 19111 interfaces: {@link org.opengis.referencing.datum.Ellipsoid}, + * {@link org.opengis.referencing.datum.Datum}, {@link org.opengis.referencing.datum.PrimeMeridian}, + * {@link org.opengis.referencing.cs.CoordinateSystem}, {@link org.opengis.referencing.crs.CoordinateReferenceSystem} + * and their sub-interfaces. The relationship with the GeoAPI methods is indicated in the + * "See" tags when appropriate. + * + * @author Martin Desruisseaux (Geomatys) + */ +public class PJ { + /** + * The maximal number of dimension accepted by the {@link #transform(PJ, int, double[], int, int)} + * method. This upper limit is actually somewhat arbitrary. This limit exists mostly as a safety + * against potential misuse. + */ + public static final int DIMENSION_MAX = 100; + // IMPLEMENTATION NOTE: if the value is modified, edit also the native C file. + + /** + * Loads the Proj4 library. + */ + static { + System.loadLibrary("proj"); + } + + /** + * The pointer to {@code PJ} structure allocated in the C/C++ heap. This value has no + * meaning in Java code. Do not modify, since this value is used by Proj4. + * Do not rename neither, unless you update accordingly the C code in JNI wrappers. + */ + private final long ptr; + + /** + * Creates a new {@code PJ} structure from the given Proj4 definition string. + * + * @param definition The Proj.4 definition string. + * @throws IllegalArgumentException If the PJ structure can not be created from the given string. + */ + public PJ(final String definition) throws IllegalArgumentException { + ptr = allocatePJ(definition); + if (ptr == 0) { + throw new IllegalArgumentException(definition); + } + } + + /** + * Creates a new {@code PJ} structure derived from an existing {@code PJ} object. + * This constructor is usually for getting the + * {@linkplain org.opengis.referencing.crs.ProjectedCRS#getBaseCRS() base geographic CRS} + * from a {@linkplain org.opengis.referencing.crs.ProjectedCRS projected CRS}. + * + * @param crs The CRS (usually projected) from which to derive a new CRS. + * @param type The type of the new CRS. Currently, only {@link Type#GEOGRAPHIC} is supported. + * @throws IllegalArgumentException If the PJ structure can not be created. + */ + public PJ(final PJ crs, final Type type) throws IllegalArgumentException { + if (crs == null) { + // TODO: Use Objects with JDK 7. + throw new NullPointerException("The CRS must be non-null."); + } + if (type != Type.GEOGRAPHIC) { + throw new IllegalArgumentException("Can not derive the " + type + " type."); + } + ptr = allocateGeoPJ(crs); + if (ptr == 0) { + throw new IllegalArgumentException(crs.getLastError()); + } + } + + /** + * Allocates a PJ native data structure and returns the pointer to it. This method should be + * invoked by the constructor only, and the return value must be assigned + * to the {@link #ptr} field. The allocated structure is released by the {@link #finalize()} + * method. + * + * @param definition The Proj4 definition string. + * @return A pointer to the PJ native data structure, or 0 if the operation failed. + */ + private static native long allocatePJ(String definition); + + /** + * Allocates a PJ native data structure for the base geographic CRS of the given CRS, and + * returns the pointer to it. This method should be invoked by the constructor only, and + * the return value must be assigned to the {@link #ptr} field. + * The allocated structure is released by the {@link #finalize()} method. + * + * @param projected The CRS from which to derive the base geographic CRS. + * @return A pointer to the PJ native data structure, or 0 if the operation failed. + */ + private static native long allocateGeoPJ(PJ projected); + + /** + * Returns the version number of the Proj4 library. + * + * @return The Proj.4 release string. + */ + public static native String getVersion(); + + /** + * Returns the Proj4 definition string. This is the string given to the constructor, + * expanded with as much information as possible. + * + * @return The Proj4 definition string. + */ + public native String getDefinition(); + + /** + * Returns the Coordinate Reference System type. + * + * @return The CRS type. + */ + public native Type getType(); + + /** + * The coordinate reference system (CRS) type returned by {@link PJ#getType()}. + * In the Proj.4 library, a CRS can only be geographic, geocentric or projected, + * without distinction between 2D and 3D CRS. + * + * @author Martin Desruisseaux (Geomatys) + */ + public static enum Type { + /* + * IMPLEMENTATION NOTE: Do not rename those fields, unless you update the + * native C code accordingly. + */ + + /** + * The CRS is of type {@link org.opengis.referencing.crs.GeographicCRS}. + * The CRS can be two-dimensional or three-dimensional. + */ + GEOGRAPHIC, + + /** + * The CRS is of type {@link org.opengis.referencing.crs.GeocentricCRS}. + * The CRS can only be three-dimensional. + */ + GEOCENTRIC, + + /** + * The CRS is of type {@link org.opengis.referencing.crs.ProjectedCRS}. + * The CRS can be two-dimensional or three-dimensional. + */ + PROJECTED + } + + /** + * Returns the value stored in the {@code a_orig} PJ field. + * + * @return The axis length stored in {@code a_orig}. + * + * @see org.opengis.referencing.datum.Ellipsoid#getSemiMajorAxis() + */ + public native double getSemiMajorAxis(); + + /** + * Returns the value computed from PJ fields by {@code √((a_orig)² × (1 - es_orig))}. + * + * @return The axis length computed by {@code √((a_orig)² × (1 - es_orig))}. + * + * @see org.opengis.referencing.datum.Ellipsoid#getSemiMinorAxis() + */ + public native double getSemiMinorAxis(); + + /** + * Returns the square of the ellipsoid eccentricity (ε²). The eccentricity + * is related to axis length by ε=√(1-(b/a)²). The + * eccentricity of a sphere is zero. + * + * @return The eccentricity. + * + * @see org.opengis.referencing.datum.Ellipsoid#isSphere() + * @see org.opengis.referencing.datum.Ellipsoid#getInverseFlattening() + */ + public native double getEccentricitySquared(); + + /** + * Returns an array of character indicating the direction of each axis. Directions are + * characters like {@code 'e'} for East, {@code 'n'} for North and {@code 'u'} for Up. + * + * @return The axis directions. + * + * @see org.opengis.referencing.cs.CoordinateSystemAxis#getDirection() + */ + public native char[] getAxisDirections(); + + /** + * Longitude of the prime meridian measured from the Greenwich meridian, positive eastward. + * + * @return The prime meridian longitude, in degrees. + * + * @see org.opengis.referencing.datum.PrimeMeridian#getGreenwichLongitude() + */ + public native double getGreenwichLongitude(); + + /** + * Returns the conversion factor from the linear units to metres. + * + * @param vertical {@code false} for the conversion factor of horizontal axes, + * or {@code true} for the conversion factor of the vertical axis. + * @return The conversion factor to metres for the given axis. + */ + public native double getLinearUnitToMetre(boolean vertical); + + /** + * Transforms in-place the coordinates in the given array. The coordinates array shall contain + * (x,y,z,…) tuples, where the z and + * following dimensions are optional. Note that any dimension after the z value + * are ignored. + *

+ * Input and output units: + *

+ *

    + *
  • Angular units (as in longitude and latitudes) are decimal degrees.
  • + *
  • Linear units are usually metres, but this is actually projection-dependent.
  • + *
+ * + * @param target The target CRS. + * @param dimension The dimension of each coordinate value. Must be in the [2-{@value #DIMENSION_MAX}] range. + * @param coordinates The coordinates to transform, as a sequence of + * (x,y,<z>,…) tuples. + * @param offset Offset of the first coordinate in the given array. + * @param numPts Number of points to transform. + * @throws NullPointerException If the {@code target} or {@code coordinates} argument is null. + * @throws IndexOutOfBoundsException if the {@code offset} or {@code numPts} arguments are invalid. + * @throws PJException If the operation failed for an other reason (provided by Proj4). + * + * @see org.opengis.referencing.operation.MathTransform#transform(double[], int, double[], int, int) + */ + public native void transform(PJ target, int dimension, double[] coordinates, int offset, int numPts) + throws PJException; + + /** + * Returns a description of the last error that occurred, or {@code null} if none. + * + * @return The last error that occurred, or {@code null}. + */ + public native String getLastError(); + + /** + * Returns the string representation of the PJ structure. + * + * @return The string representation. + */ + @Override + public native String toString(); + + /** + * Deallocates the native PJ data structure. This method can be invoked only by the garbage + * collector, and must be invoked exactly once (no more, no less). + * NEVER INVOKE THIS METHOD EXPLICITELY, NEVER OVERRIDE. + */ + @Override + protected final native void finalize(); +} diff --git a/proj4/jniwrap/org/proj4/PJException.java b/proj4/jniwrap/org/proj4/PJException.java new file mode 100644 index 000000000000..18a5885119f2 --- /dev/null +++ b/proj4/jniwrap/org/proj4/PJException.java @@ -0,0 +1,60 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Java/JNI wrappers for PROJ.4 API. + * Author: Martin Desruisseaux + * + ****************************************************************************** + * Copyright (c) 2011, Open Geospatial Consortium, Inc. + * + * 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. + ***************************************************************************** + * This file is a copy of a file developed in the GeoAPI "Proj.4 binding" + * module (http://www.geoapi.org/geoapi-proj4/index.html). If this file is + * modified, please consider synchronizing the changes with GeoAPI. + */ +package org.proj4; + + +/** + * Exception thrown when a call to {@link PJ#transform(PJ, int, double[], int, int)} failed. + * + * @author Martin Desruisseaux (Geomatys) + */ +public class PJException extends Exception { + /** + * For cross-version compatibility. + */ + private static final long serialVersionUID = -2580747577812829763L; + + /** + * Constructs a new exception with no message. + */ + public PJException() { + super(); + } + + /** + * Constructs a new exception with the given message. + * + * @param message A message that describe the cause for the failure. + */ + public PJException(final String message) { + super(message); + } +} diff --git a/proj4/jniwrap/org/proj4/package-info.java b/proj4/jniwrap/org/proj4/package-info.java new file mode 100644 index 000000000000..8a6b75a337c8 --- /dev/null +++ b/proj4/jniwrap/org/proj4/package-info.java @@ -0,0 +1,40 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Java/JNI wrappers for PROJ.4 API. + * Author: Martin Desruisseaux + * + ****************************************************************************** + * Copyright (c) 2011, Open Geospatial Consortium, Inc. + * + * 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. + ***************************************************************************** + * This file is a copy of a file developed in the GeoAPI "Proj.4 binding" + * module (http://www.geoapi.org/geoapi-proj4/index.html). If this file is + * modified, please consider synchronizing the changes with GeoAPI. + */ + +/** + * Wrappers for the Proj4 library. The {@link org.proj4.PJ} + * class contains only native methods delegating their work to the Proj.4 library. + * For higher-level methods making use of those native methods, see for example the + * GeoAPI bindings for Proj.4. + * + * @author Martin Desruisseaux (Geomatys) + */ +package org.proj4; diff --git a/proj4/m4/ax_cflags_warn_all.m4 b/proj4/m4/ax_cflags_warn_all.m4 new file mode 100644 index 000000000000..ae0e7ef24569 --- /dev/null +++ b/proj4/m4/ax_cflags_warn_all.m4 @@ -0,0 +1,120 @@ +dnl @synopsis AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] +dnl +dnl Try to find a compiler option that enables most reasonable +dnl warnings. This macro is directly derived from VL_PROG_CC_WARNINGS +dnl which is split up into two AX_CFLAGS_WARN_ALL and +dnl AX_CFLAGS_WARN_ALL_ANSI +dnl +dnl For the GNU CC compiler it will be -Wall (and -ansi -pedantic) The +dnl result is added to the shellvar being CFLAGS by default. +dnl +dnl Currently this macro knows about GCC, Solaris C compiler, Digital +dnl Unix C compiler, C for AIX Compiler, HP-UX C compiler, IRIX C +dnl compiler, NEC SX-5 (Super-UX 10) C compiler, and Cray J90 (Unicos +dnl 10.0.0.8) C compiler. +dnl +dnl - $1 shell-variable-to-add-to : CFLAGS +dnl - $2 add-value-if-not-found : nothing +dnl - $3 action-if-found : add value to shellvariable +dnl - $4 action-if-not-found : nothing +dnl +dnl @category C +dnl @author Guido Draheim +dnl @version 2003-01-06 +dnl @license GPLWithACException + +AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl +AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl +AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all])dnl +AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], +VAR,[VAR="no, unknown" + AC_LANG_SAVE + AC_LANG(C) + ac_save_[]FLAGS="$[]FLAGS" +for ac_arg dnl +in "-pedantic -Wdeclaration-after-statement % dnl + -Wall -Wdeclaration-after-statement" dnl works since GCC version 3 + "-pedantic % -Wall" dnl older GCC + "-xstrconst % -v" dnl Solaris C + "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix + "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX + "-ansi -ansiE % -fullwarn" dnl IRIX + "+ESlit % +w1" dnl HP-UX C + "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) + "-h conform % -h msglevel 2" dnl Cray C (Unicos) + # +do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` + AC_TRY_COMPILE([],[return 0;], + [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) +done + FLAGS="$ac_save_[]FLAGS" + AC_LANG_RESTORE +]) +case ".$VAR" in + .ok|.ok,*) m4_ifvaln($3,$3) ;; + .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ + AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; + *) m4_ifvaln($3,$3,[ + if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null + then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) + else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" + fi ]) ;; +esac +AS_VAR_POPDEF([VAR])dnl +AS_VAR_POPDEF([FLAGS])dnl +]) + +dnl the only difference - the LANG selection... and the default FLAGS + +AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl +AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl +AS_VAR_PUSHDEF([VAR],[ac_cv_cxxflags_warn_all])dnl +AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], +VAR,[VAR="no, unknown" + AC_LANG_SAVE + AC_LANG(C++) + ac_save_[]FLAGS="$[]FLAGS" +for ac_arg dnl +in "-pedantic % -Wall" dnl GCC + "-xstrconst % -v" dnl Solaris C + "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix + "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX + "-ansi -ansiE % -fullwarn" dnl IRIX + "+ESlit % +w1" dnl HP-UX C + "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) + "-h conform % -h msglevel 2" dnl Cray C (Unicos) + # +do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` + AC_TRY_COMPILE([],[return 0;], + [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) +done + FLAGS="$ac_save_[]FLAGS" + AC_LANG_RESTORE +]) +case ".$VAR" in + .ok|.ok,*) m4_ifvaln($3,$3) ;; + .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ + AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; + *) m4_ifvaln($3,$3,[ + if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null + then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) + else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" + fi ]) ;; +esac +AS_VAR_POPDEF([VAR])dnl +AS_VAR_POPDEF([FLAGS])dnl +]) + +dnl implementation tactics: +dnl the for-argument contains a list of options. The first part of +dnl these does only exist to detect the compiler - usually it is +dnl a global option to enable -ansi or -extrawarnings. All other +dnl compilers will fail about it. That was needed since a lot of +dnl compilers will give false positives for some option-syntax +dnl like -Woption or -Xoption as they think of it is a pass-through +dnl to later compile stages or something. The "%" is used as a +dnl delimimiter. A non-option comment can be given after "%%" marks. diff --git a/proj4/makefile.vc b/proj4/makefile.vc new file mode 100644 index 000000000000..6c9bb58f69c7 --- /dev/null +++ b/proj4/makefile.vc @@ -0,0 +1,30 @@ +# +# NMAKE Makefile to build PROJ.4 on Windows +# +# This makefile.vc delegates making targets to src\makefile.vc +# so it's just a thin wrapper. +# +MAKE = nmake +RM = -del + +default: + cd src + $(MAKE) /f makefile.vc + cd ..\nad + $(MAKE) /f makefile.vc + cd .. + +clean: + cd src + $(MAKE) /f makefile.vc clean + cd ..\nad + $(MAKE) /f makefile.vc clean + cd .. + +install-all: + cd src + $(MAKE) /f makefile.vc install + cd ..\nad + $(MAKE) /f makefile.vc install-all + cd .. + diff --git a/proj4/man/CMakeLists.txt b/proj4/man/CMakeLists.txt new file mode 100644 index 000000000000..bf47b16f1fb2 --- /dev/null +++ b/proj4/man/CMakeLists.txt @@ -0,0 +1,6 @@ +install (FILES man1/proj.1 man1/cs2cs.1 man1/geod.1 + DESTINATION share/man/man1) + +install (FILES man3/pj_init.3 man3/geodesic.3 + DESTINATION share/man/man3) + diff --git a/proj4/man/Makefile.am b/proj4/man/Makefile.am new file mode 100644 index 000000000000..3505dd4d1251 --- /dev/null +++ b/proj4/man/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = man1 man3 + +EXTRA_DIST = CMakeLists.txt diff --git a/proj4/man/man1/Makefile.am b/proj4/man/man1/Makefile.am new file mode 100644 index 000000000000..b175aaa02292 --- /dev/null +++ b/proj4/man/man1/Makefile.am @@ -0,0 +1,4 @@ +man_MANS = geod.1 proj.1 cs2cs.1 + +EXTRA_DIST = $(man_MANS) + diff --git a/proj4/man/man1/cs2cs.1 b/proj4/man/man1/cs2cs.1 new file mode 100644 index 000000000000..bfebe8eada06 --- /dev/null +++ b/proj4/man/man1/cs2cs.1 @@ -0,0 +1,205 @@ +.\" release 4 +.nr LL 5.5i +.ad b +.hy 1 +.TH CS2CS 1 "2000/03/21 Rel. 4.4" +.SH NAME +cs2cs \- cartographic coordinate system filter +.SH SYNOPSIS +.B cs2cs +[ +.B \-eEfIlrstvwW +[ +.I args +] ] [ +.B +opts[=arg] +] +.br + [ \fB+to\fR [\fB+opts\fR[\fB=arg\fR]] ] +file[s] +.SH DESCRIPTION +.I Cs2cs +performs transformation between the source and destination cartographic +coordinate system on a set of input points. The coordinate system +transformation can include translation between projected and geographic +coordinates as well as the application of datum shifts. +.PP +The following control parameters can appear in any order: +.TP +.BI \-I +method to specify inverse translation, convert from \fB+to\fR coordinate +system to the primary coordinate system defined. +.TP +.BI \-t "a" +.I A +specifies a character employed as the first character to denote +a control line to be passed through without processing. +This option applicable to ascii input only. +(# is the default value). +.TP +.BI \-e " string" +.I String +is an arbitrary string to be output if an error is detected during +data transformations. +The default value is: *\et*. +Note that if the +.B \-b, +.B \-i +or +.B \-o +options are employed, an error is returned as HUGE_VAL +value for both return values. +.TP +.BI \-E +causes the input coordinates to be copied to the output line +prior to printing the converted values. +.TP +.BI \-l "[p|P|=|e|u|d]" id +List projection identifiers with +.B \-l, +.B \-lp +or +.B \-lP (expanded) +that can be selected with +.B +proj. +.BI \-l= id +gives expanded description of projection +.I id. +List ellipsoid identifiers with +.B \-le, +that can be selected with +.B +ellps, +.B \-lu +list of cartesian to meter conversion factors +that can be selected with +.B +units +or +.B \-ld +list of datums that can be selected with +.B +datum. +.TP +.BI \-r +This options reverses the order of the +expected input from longitude-latitude or x-y to latitude-longitude or y-x. +.TP +.BI \-s +This options reverses the order of the +output from x-y or longitude-latitude to y-x or latitude-longitude. +.TP +.BI \-f " format" +.I Format +is a +.I printf +format string to control the form of the output values. +For inverse projections, the output will be in degrees when this option +is employed. +If a format is specified for inverse projection the +output data will be in decimal degrees. +The default format is "%.2f" for forward projection and DMS +for inverse. +.TP +.BI \-[w|W] n +.I N +is the number of significant fractional digits to employ for +seconds output (when the option is not specified, +.B \-w3 +is assumed). +When +.B \-W +is employed the fields will be constant width and with leading zeroes. +.TP +.B \-v +causes a listing of cartographic control parameters tested for and +used by the program to be printed prior to input data. +.PP +The +.B +args +run-line arguments are associated with cartographic parameters +and usage varies with projection and for a complete description see +.I "Cartographic Projection Procedures for the UNIX Environment\(emA User's Manual" +and supplementary documentation for Release 4. +.PP +The \fIcs2cs\fR program requires two coordinate system definitions. The +first (or primary is defined based on all projection parameters not +appearing after the \fB+to\fR argument. All projection parameters +appearing after the \fB+to\fR argument are considered the definition +of the second coordinate system. If there is no second coordinate system +defined, a geographic coordinate system based on the datum and ellipsoid of +the source coordinate system is assumed. Note that the source and destination +coordinate system can both be projections, both be geographic, or one of +each and may have the same or different datums. +.PP +Additional projection control parameters may be contained in two +auxiliary control files: +the first is optionally referenced with the +.BI +init= file:id +and the second is always processed after the name +of the projection has been established from either the run-line +or the contents of +.B +init +file. +The environment parameter +.B PROJ_LIB +establishes the default directory for a file reference without +an absolute path. This is also used for supporting files like +datum shift files. +.PP +One or more +.I files +(processed in left to right order) +specify the source of data to be transformed. +A \- will specify the location of processing standard input. +If no files are specified, the input is assumed to be from +.I stdin. +For input data the two data values must be in the +first two white space separated fields and +when both input and output are ASCII all trailing portions +of the input line are appended to the output line. +.PP +Input geographic data +(longitude and latitude) must be in DMS or decimal degrees format and input +cartesian data must be in units consistent with the ellipsoid +major axis or sphere radius units. +Output geographic coordinates will normally be in DMS format (use +.B \-f %.12f +for decimal degrees with 12 decimal places), while +projected (cartesian) coordinates will be in linear (meter, feet) units. + +.SH EXAMPLE +The following script +.RS 5 + \f(CWcs2cs +proj=latlong +datum=NAD83 + +to +proj=utm +zone=10 +datum=NAD27 \-r < +[ +.B \-afFIlptwW +[ +.I args +] ] [ +.B +args +] +file[s] +.br +.B invgeod +.B +ellps= +[ +.B \-afFIlptwW +[ +.I args +] ] [ +.B +args +] +file[s] +.SH DESCRIPTION +.I geod +(direct) and +.I invgeod +(inverse) +perform geodesic ("Great Circle") computations for determining +latitude, longitude and back azimuth of a terminus point +given a initial point latitude, longitude, azimuth and distance (direct) or +the forward and back azimuths and distance between an initial and +terminus point latitudes and longitudes (inverse). The results are +accurate to round off for |\fIf\fR| < 1/50, where \fIf\fR is flattening. +.B invgeod +may not be available on all platforms; in this case call +.B geod +with the +.B \-I +option. +.PP +The following command-line options can appear in any order: +.TP +.B \-I +Specifies that the inverse geodesic computation is to be performed. +May be used with execution of +.B geod +as an alternative to +.B invgeod +execution. +.TP +.B \-a +Latitude and longitudes of the initial and terminal points, +forward and back azimuths and distance are output. +.TP +.BI \-t "a" +.I A +specifies a character employed as the first character to denote +a control line to be passed through without processing. +.TP +.BI \-le +Gives a listing of all the ellipsoids that may be selected with the +.B +ellps= +option. +.TP +.BI \-lu +Gives a listing of all the units that may be selected with the +.B +units= +option. +.TP +.BI \-[f|F] " format" +.I Format +is a +.I printf +format string to control the output form of the geographic coordinate values +(\fBf\fR) or distance value (\fBF\fR). +The default mode is DMS for geographic coordinates and "%.3f" for distance. +.TP +.BI \-[w|W] n +.I N +is the number of significant fractional digits to employ for +seconds output (when the option is not specified, +.B \-w3 +is assumed). +When +.B \-W +is employed the fields will be constant width with leading zeroes. +.TP +.B \-p +This option causes the azimuthal values to be output as unsigned +DMS numbers between 0 and 360 degrees. Also note \-f. +.PP +The +.B +args +command-line options are associated with geodetic parameters +for specifying the ellipsoidal or sphere to use. +See +.B proj +documentation for full list of these parameters and controls. +The options are processed in left to right order +from the command line. +Reentry of an option is ignored with the first occurrence assumed to +be the desired value. +.PP +One or more +.I files +(processed in left to right order) +specify the source of data to be transformed. +A \- will specify the location of processing standard input. +If no files are specified, the input is assumed to be from +.I stdin. +.PP +For direct determinations input data must be in latitude, +longitude, azimuth and distance order and output will be +latitude, longitude and back azimuth of the terminus point. +Latitude, longitude of the initial and terminus point are +input for the inverse mode and respective forward and back +azimuth from the initial and terminus points are output along +with the distance between the points. +.PP +Input geographic coordinates (latitude and longitude) and azimuthal data +must be in decimal degrees or DMS format and input distance data must be +in units consistent with the ellipsoid major axis or sphere radius +units. The latitude must lie in the range [-90d,90d]. Output +geographic coordinates will be in DMS (if the +.B \-f +switch is not employed) to 0.001" +with trailing, zero-valued minute-second fields deleted. +Output distance data will be in the same units as the ellipsoid or +sphere radius. +.PP +The Earth's ellipsoidal figure may be selected in the same +manner as program +.B proj +by using +.B "+ellps=, +a=, +es=," +etc. +.PP +.I Geod +may also be used to determine intermediate points along either +a geodesic line between two points or along an arc of specified distance +from a geographic point. +In both cases an initial point must be specified with +.BI +lat_1= lat +and +.BI +lon_1= lon +parameters and either a terminus point +.BI +lat_2= lat +and +.BI +lon_2= lon +or a distance and azimuth from the initial point with +.BI +S= distance +and +.BI +A= azimuth +must be specified. +.PP +If points along a geodesic are to be determined then either +.BI +n_S= integer +specifying the number of intermediate points and/or +.BI +del_S= distance +specifying the incremental distance between points must be specified. +.PP +To determine points along an arc equidistant from the initial point both +.BI +del_A= angle +and +.BI +n_A= integer +must be specified which determine the respective angular increments +and number of points to be determined. +.RE +.SH EXAMPLE +The following script determines the geodesic azimuths and distance in +U.S. statute miles from Boston, MA, to Portland, OR: +.RS 5 + \f(CWgeod +ellps=clrk66 < for each input point. +For conformal projections meridinal and parallel scales factors +will be equal and angular distortion zero. +Equal area projections will have an area factor of 1. +.TP +.BI \-m " mult" +The cartesian data may be scaled by the +.I mult +parameter. +When processing data in a forward projection mode the +cartesian output values are multiplied by +.I mult +otherwise the input cartesian values are divided by +.I mult +before inverse projection. +If the first two characters of +.I mult +are 1/ or 1: then the reciprocal value of +.I mult +is employed. +.TP +.BI \-f " format" +.I Format +is a +.I printf +format string to control the form of the output values. +For inverse projections, the output will be in degrees when this option +is employed. +The default format is "%.2f" for forward projection and DMS +for inverse. +.TP +.BI \-[w|W] n +.I N +is the number of significant fractional digits to employ for +seconds output (when the option is not specified, +.B \-w3 +is assumed). +When +.B \-W +is employed the fields will be constant width and with leading zeroes. +.TP +.B \-v +causes a listing of cartographic control parameters tested for and +used by the program to be printed prior to input data. +Should not be used with the +.B \-T +option. +.TP +.B \-V +This option causes an expanded annotated listing of the characteristics +of the projected point. +.B -v is implied with this option. +.TP +.BI \-T " ulow,uhi,vlow,vhi,res[,umax,vmax]" +This option creates a set of bivariate Chebyshev polynomial +coefficients that approximate the selected cartographic projection on +.I stdout. +The values +.I low +and +.I hi +denote the range of the input where the +.I u +or +.I v +prefixes apply to respective longitude-x or latitude-y +depending upon whether a forward or inverse projection is selected. +.I Res +is an integer number specifying the power of 10 precision of the +approximation. +For example, a +.I res +of \-3 specifies an approximation with an accuracy better than .001. +.I Umax, +and +.I vmax +specify maximum degree of the polynomials (default: 15). +See also: +.B fproj(1). +.PP +The +.B +args +run-line arguments are associated with cartographic parameters +and usage varies with projection and for a complete description see +.I "Cartographic Projection Procedures for the UNIX Environment\(emA User's Manual" +and supplementary documentation for Release 4. +.PP +Additional projection control parameters may be contained in two +auxiliary control files: +the first is optionally referenced with the +.BI +init= file:id +and the second is always processed after the name +of the projection has been established from either the run-line +or the contents of +.B +init +file. +The environment parameter +.B PROJ_LIB +establishes the default directory for a file reference without +an absolute path. This is also used for supporting files like +datum shift files. +.PP +One or more +.I files +(processed in left to right order) +specify the source of data to be transformed. +A \- will specify the location of processing standard input. +If no files are specified, the input is assumed to be from +.I stdin. +For ASCII input data the two data values must be in the +first two white space separated fields and +when both input and output are ASCII all trailing portions +of the input line are appended to the output line. +.PP +Input geographic data +(longitude and latitude) must be in DMS format and input +cartesian data must be in units consistent with the ellipsoid +major axis or sphere radius units. +Output geographic coordinates will be in DMS +(if the +.B \-w +switch is not employed) and precise to 0.001" +with trailing, zero-valued minute-second fields deleted. +.SH EXAMPLE +The following script +.RS 5 + \f(CWproj +proj=utm +lon_0=112w +ellps=clrk66 \-r < +.br +and link against the \fBproj\fR library. +.SH DESCRIPTION +This library is a port of the geodesic routines in the C++ library, +GeographicLib, to C. It solves the direct and inverse geodesic problems +on an ellipsoid of revolution. In addition, the reduced length of a +geodesic and the area between a geodesic and the equator can be +computed. The results are accurate to round off for |\fIf\fR| < 1/50, +where \fIf\fR is the flattening. Note that the geodesic routines +measure angles (latitudes, longitudes, and azimuths) in degrees, unlike +the rest of the \fBproj\fR library, which uses radians. The +documentation for this library is included in geodesic.h. A formatted +version of the documentation is available at +http://geographiclib.sf.net/1.46/C +.SH EXAMPLE +The following program reads in lines with the coordinates for two points +in decimal degrees (\fIlat1\fR, \fIlon1\fR, \fIlat2\fR, \fIlon2\fR) and +prints out \fIazi1\fR, \fIazi2\fR, \fIs12\fR for the geodesic line +between each pair of points on the WGS84 ellipsoid. (N.B. \fIazi2\fR is +the forward azimuth at point 2.) +.nf +\f(CW + +#include +#include + +int main() { + double a = 6378137, f = 1/298.257223563; /* WGS84 */ + double lat1, lon1, azi1, lat2, lon2, azi2, s12; + struct geod_geodesic g; + + geod_init(&g, a, f); + while (scanf("%lf %lf %lf %lf", + &lat1, &lon1, &lat2, &lon2) == 4) { + geod_inverse(&g, lat1, lon1, lat2, lon2, + &s12, &azi1, &azi2); + printf("%.8f %.8f %.3f\en", azi1, azi2, s12); + } + return 0; +} \fR +.br +.fi +.SH LIBRARY +libproj.a \- library of projections and support procedures +.SH SEE ALSO +Full online documentation for \fBgeodesic(3)\fR, +.br +http://geographiclib.sf.net/1.46/C +.PP +.B geod(1) +.PP +\fBGeographicLib\fR, http://geographiclib.sf.net +.PP +The \fBGeodesicExact\fR class in GeographicLib solves the geodesic +problems in terms of elliptic integrals; the results are accurate for +arbitrary \fIf\fR. +.PP +C. F. F. Karney, \fIAlgorithms for Geodesics\fR, +.br +J. Geodesy \fB87\fR, 43-55 (2013); +.br +DOI: http://dx.doi.org/10.1007/s00190-012-0578-z +.br +http://geographiclib.sf.net/geod-addenda.html +.PP +\fIA geodesic bibliography\fR, +.br +http://geographiclib.sf.net/geodesic-papers/biblio.html +.PP +The Wikipedia page, \fIGeodesics on an ellipsoid\fR, +.br +https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid +.SH BUGS +A list of known bugs can found at https://github.com/OSGeo/proj.4/issues +where new bug reports can be submitted too. +.SH HOME PAGE +http://proj4.org/ diff --git a/proj4/man/man3/pj_init.3 b/proj4/man/man3/pj_init.3 new file mode 100644 index 000000000000..4c989ced561b --- /dev/null +++ b/proj4/man/man3/pj_init.3 @@ -0,0 +1,114 @@ +.\" @(#)pj_init.3 - 4.1 +.nr LL 5.5i +.TH PJ_INIT 3U "2001/04/05 Rel. 4.4" +.ad b +.hy 1 +.SH NAME +pj_init \- initialize cartographic projection +.br +pj_init_plus \- initialize cartographic projection +.br +pj_fwd \- forward cartographic projection +.br +pj_inv \- inverse cartographic projection +.br +pj_transform \- transform between coordinate systems +.br +pj_free \- de-initialize projection +.SH SYNOPSIS +.nf +#include + +projPJ pj_init(int argc, char **argv) + +projPJ pj_init_plus(const char *defn) + +projUV pj_fwd(projUV val, projPJ proj) + +projUV pj_inv(projUV val, projPJ proj) + +int pj_transform(projPJ src_cs, projPJ dst_cs, long point_count, + int point_offset, double *x, double *y, double *z) + +void pj_free(projPJ proj) + +.SH DESCRIPTION +Procedure \fBpj_init\fR selects and initializes a cartographic projection +with its argument control parameters. +\fBArgc\fR is the number of elements in the array of control strings +\fBargv\fR that each contain individual cartographic control keyword +assignments (\f(CW+\fR \fBproj\fR arguments). +The list must contain at least the \fBproj=\fIprojection\fR and +Earth's radius or elliptical parameters. +If the initialization of the projection is successful a valid +address is returned otherwise a NULL value. + +The \fBpj_init_plus\fR function operates similarly to \fBpj_init\fR but +takes a single string containing the definition, with each parameter +prefixed with a plus sign. For example "+proj=utm +zone=11 +ellps=WGS84". + +Once initialization is performed either forward or inverse +projections can be performed with the returned value of \fBpj_init\fR +used as the argument \fBproj\fR. +The argument structure \fBprojUV\fR values \fBu\fR and \fBv\fR contain +respective longitude and latitude or x and y. +Latitude and longitude are in radians. +If a projection operation fails, both elements of \fBprojUV\fR are +set to HUGE_VAL (defined in \fImath.h\fR). + +\fBNote:\fR all projections have a forward mode, but some do not have +an inverse projection. +If the projection does not have an inverse the projPJ structure element +\fIinv\fR will be NULL. + +The \fBpj_transform\fR function may be used to transform points between +the two provided coordinate systems. In addition to converting between +cartographic projection coordinates and geographic coordinates, this function +also takes care of datum shifts if possible between the source and destination +coordinate system. Unlike \fBpj_fwd\fR and \fBpj_inv\fR it is also allowable +for the coordinate system definitions (\fBPJ *\fR) to be geographic coordinate +systems (defined as +proj=latlong). The \fBx\fR, \fBy\fR and \fBz\fR arrays +contain the input values of the points, and are replaced with the output +values. The \fBpoint_offset\fR should indicate the spacing the of \fBx,y,z\fR +arrays, normally 1. The function returns zero on success, or the error number (also in +pj_errno) on failure. + +Memory associated with the projection may be freed with \fBpj_free\fR. +.SH EXAMPLE +The following program reads latitude and longitude values in decimal +degrees, performs Mercator projection with a Clarke 1866 ellipsoid and +a 33\(de latitude of true scale and prints the projected +cartesian values in meters: +.nf +\f(CW +#include + +main(int argc, char **argv) { + char *args[] = { "proj=merc", "ellps=clrk66", "lat_ts=33" }; + projUV p; + projPJ pj; + + if (!(pj = pj_init(3, args))) + exit(1); + while (scanf("%lf %lf", &p.v, &p.u) == 2) { + p.u *= DEG_TO_RAD; + p.v *= DEG_TO_RAD; + p = pj_fwd(p, pj); + printf("%.2f\et%.2f\en", p.u, p.v); + } + exit(0); +} \fR +.br +.fi +.SH LIBRARY +libproj.a \- library of projections and support procedures +.SH SEE ALSO +.B https://github.com/OSGeo/proj.4/wiki/ProjAPI, proj(1), +.br +.I "Cartographic Projection Procedures for the UNIX Environment\(emA User's Manual," +(Evenden, 1990, Open-file report 90\-284). +.SH BUGS +A list of known bugs can found at https://github.com/OSGeo/proj.4/issues +where new bug reports can be submitted too. +.SH HOME PAGE +http://proj4.org/ diff --git a/proj4/nad/CH b/proj4/nad/CH new file mode 100644 index 000000000000..7ae73187891a --- /dev/null +++ b/proj4/nad/CH @@ -0,0 +1,22 @@ +# This init file provides definitions for CH1903 and CH1903/LV03 +# projections using the distortion grids developed by Swisstopo. +# See: http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/lv03-lv95/chenyx06/distortion_grids.html +# +# You'll need to download the grids separately and put in a directory +# scanned by libproj. Directories may be added to the scan list through +# the PROJ_LIB environment variable +# +# Note that an independent effort was made to derive an usable grid +# from the CH1903->CH1903+ grid initially available from the Swisstopo +# website. You can read about this other effort here: +# http://lists.maptools.org/pipermail/proj/2012-February/006093.html +# It may be of interest because the latter was by some reported as being +# more accurate than the former: +# http://lists.maptools.org/pipermail/proj/2012-February/006119.html +# +# This init file uses the official one +# +# CH1903/LV03 +<1903_LV03> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +nadgrids=chenyx06etrs.gsb +no_defs +# CH1903 +<1903> +proj=longlat +ellps=bessel +nadgrids=chenyx06etrs.gsb +no_defs <> diff --git a/proj4/nad/CMakeLists.txt b/proj4/nad/CMakeLists.txt new file mode 100644 index 000000000000..a9b08cbdbc6d --- /dev/null +++ b/proj4/nad/CMakeLists.txt @@ -0,0 +1,57 @@ +# +# files containing dictionnary of useful projection +# + +set(PROJ_DICTIONARY epsg + esri + world + esri.extra + other.extra + IGNF + nad27 + GL27 + nad83 + nad.lst + proj_def.dat + CH ) + +# +# gridshift file +# + +file(GLOB GSB_FILES *.gsb) +set(GRIDSHIFT_FILES ${GSB_FILES}) +set(GRIDSHIFT_FILES ${GRIDSHIFT_FILES} + ) +option(CONVERT_DATA "convert some ascii file to binary file for use in proj4" OFF) +if(CONVERT_DATA AND nad2bin) + message(ERROR " you need to compile nad2bin exe in order to convert data file" ) +else(CONVERT_DATA AND nad2bin) + set(LLA_GRID_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + proj_convert_grid_lla2gsb(LLA_GRID_DIR) + file(GLOB LLA_FILES *.lla) + proj_append_lla_output_file(LLA_FILES GRIDSHIFT_FILES) +endif(CONVERT_DATA AND nad2bin) + + +# +#install +# +set(ALL_DATA_FILE ${PROJ_DICTIONARY} + ${GRIDSHIFT_FILES} + ${GEOID_FILES}) +install(FILES ${ALL_DATA_FILE} + DESTINATION ${DATADIR}) + +# +# test +# +set(CS2CS_BIN "cs2cs") +set(PROJ_BIN "proj") +proj_add_test_script_sh("test27" PROJ_BIN ) +proj_add_test_script_sh("test83" PROJ_BIN ) +proj_add_test_script_sh("testvarious" CS2CS_BIN ) +proj_add_test_script_sh("testdatumfile" CS2CS_BIN "connu") +proj_add_test_script_sh("testIGNF" CS2CS_BIN "ntf_r93.gsb") +proj_add_test_script_sh("testntv2" CS2CS_BIN "ntv2_0.gsb") + diff --git a/proj4/nad/GL27 b/proj4/nad/GL27 new file mode 100644 index 000000000000..dd927bd246c6 --- /dev/null +++ b/proj4/nad/GL27 @@ -0,0 +1,22 @@ +# SCCSID @(#)GL27 1.1 93/08/25 GIE REL +# Great Lakes Grids + # Lake Erie, Ontario and St. Lawrence River. + proj=omerc ellps=clrk66 k_0=0.9999 + lonc=78d00'W lat_0=44d00'N alpha=55d40' + x_0=-3950000 y_0=-3430000 + no_defs <> + # Lake Huron + proj=omerc ellps=clrk66 k_0=0.9999 + lonc=82d00'W lat_0=43d00'N alpha=350d37' + x_0=1200000 y_0=-3500000 + no_defs <> + # Lake Michigan + proj=omerc ellps=clrk66 k_0=0.9999 + lonc=87d00'W lat_0=44d00'N alpha=15d00' + x_0=-1000000 y_0=-4300000 + no_defs <> + # Lake Superior, Lake of the Woods + proj=omerc ellps=clrk66 k_0=0.9999 + lonc=88d50'0.256"W lat_0=47d12'21.554"N alpha=285d41'42.593" + x_0=9000000 y_0=-1600000 + no_defs <> diff --git a/proj4/nad/IGNF b/proj4/nad/IGNF new file mode 100644 index 000000000000..5a5d559adb8d --- /dev/null +++ b/proj4/nad/IGNF @@ -0,0 +1,487 @@ +# W [AMANU49] +# W [AMANU63] + +title=Ile d'Amsterdam 1963 +proj=geocent +towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [ANAA47] + +title=MOP92 (Anaa) Tuamotu +proj=geocent +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <> +# W [APAT48] +# W [APAT49] + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=geocent +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ancienne Triangulation des Ingenieurs +proj=geocent +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <> +# W [BASSAS] +# W [BIEN55] + +title=Cadastre 1997 +proj=geocent +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [CADA80] +# W [CASS1733] + +title=CIO-BIH +proj=geocent +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [CLIP67] + +title=Crozet 1963 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=EFATE-IGN 1957 +proj=geocent +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Systeme de reference terrestre Europeen (1989) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [EUROPA54] +# W [FAKA50] +# W [FANGA50] +# W [FANGA64] +# W [FANGA651] +# W [FANGA652] +# W [FANGA66] + +title=MOP84 (Fangataufa 1984) +proj=geocent +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [GLOR77CAR] + +title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [HAO49] +# W [HAO58] +# W [HAO67] +# W [HARA49] +# W [HIKU50] +# W [HIVA60] +# W [HIVA67] + +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [JULES55] + +title=MHPF70 (Kauehi) Tuamotu +proj=geocent +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Lifou - Iles Loyaute (IGN56) +proj=geocent +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=geocent +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAKE50] +# W [MANGA51] + +title=Mare - Iles Loyaute (IGN53) +proj=geocent +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=geocent +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAUPITI] + +title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MHEFO 1955 (Fatu Huku) +proj=geocent +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MHEFO55M] + +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=geocent +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MOP90 (Tetiaroa) Iles de la Societe +proj=geocent +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MURU51] +# W [MURU59] +# W [MURU62] +# W [MURU78] +# W [NC51] +# W [NOVA53] + +title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <> + +title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SAT94 (Nukutavake) Tuamotu +proj=geocent +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=geocent +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Petrels - IGN 1972 +proj=geocent +towgs84=365.0000,194.0000,166.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [PMAR55] + +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=geocent +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [RAIV54] +# W [RAIV66] +# W [RANGI47] +# W [RANGI59] +# W [RANGI68] +# W [RAPA55] +# W [RAPA80] + +title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [REUN49] +# W [REUN92] + +title=Reseau geodesique francais 1993 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique francais de Guyane 1995 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique Reunion 1992 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique des TAAF (2007) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=SAT84 (Rurutu) Iles Australes +proj=geocent +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=geocent +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ile de Saint-Paul 1969 +proj=geocent +towgs84=225.5710,-346.6080,-46.5670 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <> +# W [SYSLNCAR] + +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Tahiti-Terme Nord 1951 +proj=geocent +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TAKA69] + +title=Tanna Bloc Sud +proj=geocent +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TIKE50] +# W [TIKE60] +# W [TROM56] + +title=MHPF 1969 (Tubuai) Iles Australes +proj=geocent +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TURI69] +# W [WALL76] + +title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <> + +title=World Geodetic System 1984 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [AMANU49GEO] +# W [AMANU63GEO] + +title=Ile d'Amsterdam 1963 +proj=longlat +towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [ANAA47GEO] + +title=MOP92 (Anaa) Tuamotu +proj=longlat +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <> +# W [APAT48GEO] +# W [APAT49GEO] + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=longlat +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ancienne Triangulation des Ingenieurs +proj=longlat +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <> +# W [BASSASGEO] +# W [BIEN55GEO] + +title=Cadastre 1997 +proj=longlat +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [CADA80GEO] +# W [CASS1733GEO] +# W [CLIP67GEO] + +title=Crozet 1963 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guyane CSG67 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=EFATE-IGN 1957 +proj=longlat +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=ETRS89 geographiques (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [EUROPA54GEO] +# W [FAKA50GEO] +# W [FANGA50GEO] +# W [FANGA64GEO] +# W [FANGA651GEO] +# W [FANGA652GEO] +# W [FANGA66GEO] + +title=MOP84 (Fangataufa 1984) +proj=longlat +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [GLOR77GEO] + +title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [HAO49GEO] +# W [HAO58GEO] +# W [HAO67GEO] +# W [HARA49GEO] +# W [HIKU50GEO] +# W [HIVA60GEO] +# W [HIVA67GEO] + +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [JULES55GEO] + +title=MHPF70 (Kauehi) Tuamotu +proj=longlat +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Lifou - Iles Loyaute (IGN56) +proj=longlat +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=longlat +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAKE50GEO] +# W [MANGA51GEO] + +title=Mare - Iles Loyaute (IGN53) +proj=longlat +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=longlat +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAUPITIGEO] + +title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MHEFO 1955 (Fatu Huku) +proj=longlat +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MHEFO55MGEO] + +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=longlat +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MOP90 (Tetiaroa) Iles de la Societe +proj=longlat +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MURU51GEO] +# W [MURU59GEO] +# W [MURU62GEO] +# W [MURU78GEO] +# W [NC51GEO] +# W [NOVA53GEO] + +title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <> + +title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs <> + +title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SAT94 (Nukutavake) Tuamotu +proj=longlat +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=longlat +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [PMAR55GEO] + +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=longlat +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [RAIV54GEO] +# W [RAIV66GEO] +# W [RANGI47GEO] +# W [RANGI59GEO] +# W [RANGI68GEO] +# W [RAPA55GEO] +# W [RAPA80GEO] + +title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [REUN49GEO] +# W [REUN92GEO] + +title=Reseau geodesique francais 1993 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique francais de Guyane 1995 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique de la Reunion 1992 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique des TAAF (2007) (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=SAT84 (Rurutu) Iles Australes +proj=longlat +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=longlat +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ile de Saint-Paul 1969 +proj=longlat +towgs84=225.5710,-346.6080,-46.5670 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <> +# W [SYSLNGEO] + +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Tahiti-Terme Nord 1951 +proj=longlat +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TAKA69GEO] + +title=Tanna Bloc Sud +proj=longlat +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TIKE50GEO] +# W [TIKE60GEO] +# W [TROM56GEO] + +title=MHPF 1969 (Tubuai) Iles Australes +proj=longlat +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TURI69GEO] +# W [VAITAPEGEO] +# W [WALL76GEO] + +title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <> + +title=World Geodetic System 1984 +proj=longlat +a=6378137.0000 +rf=298.2572221010000 +units=m +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +no_defs <> + +title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [AMANU63UTM7S] + +title=Amsterdam 1963 +proj=tmerc +towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [ANAA47UTM6S] + +title=MOP92 (Anaa) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 7 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [BASSASUTM37S] + +title=Cadastre 1997 - UTM fuseau 38 Sud +proj=tmerc +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [CADA80UTM7S] +# W [CLIP57UTM12] + +title=Crozet 1963 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=EFATE-IGN 1957 - UTM fuseau 59 Sud +proj=tmerc +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=ETRS89 Lambert Azimutal Equal Area +proj=laea +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=10.000000000 +x_0=4321000.000 +y_0=3210000.000 +units=m +no_defs <> + +title=ETRS89 Lambert Conformal Conic +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=9.999999995 +lat_1=35.000000000 +lat_2=65.000000000 +x_0=4000000.000 +y_0=2800000.000 +units=m +no_defs <> +# W [FAKA50UTM6S] +# W [FANGA64UTM7S] +# W [FANGA651U7S] +# W [FANGA652U7S] +# W [FANGA66UTM7S] + +title=Fangataufa 1984 - UTM fuseau 7 Sud +proj=tmerc +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Crozet +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Guyane +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Mayotte +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> +# W [GLOR77UTM38S] + +title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> +# W [HAO58UTM7S] +# W [HAO67UTM7S] +# W [HARA49UTM7S] +# W [HIKU50UTM7S] +# W [HIVA60UTM7S] +# W [HIVA67UTM7S] + +title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=IGN 1972 - Lambert Nouvelle Caledonie +proj=lcc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.499999999 +lon_0=166.000000000 +lat_1=-20.666666667 +lat_2=-22.333333333 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <> + +title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MHPF70 (Kauehi) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Kerguelen 1962 +proj=tmerc +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> + +title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs <> + +title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> + +title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <> + +title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> + +title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs <> + +title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs <> + +title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs <> + +title=Lambert 93 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs <> + +title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <> + +title=Lambert grand champ +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=47.000000000 +lon_0=0.000000000 +lat_1=45.000000000 +lat_2=49.000000000 +x_0=600000.000 +y_0=600000.000 +units=m +no_defs <> + +title=Luxembourg 1929 +proj=tmerc +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=49.833333333 +lon_0=6.166666667 +k_0=1.00000000 +x_0=80000.000 +y_0=100000.000 +units=m +no_defs <> +# W [MAKE50UTM7S] +# W [MANGA51U8S] + +title=Mare - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> +# W [MAUPITIUTM5S] + +title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) - UTM 8 S +proj=tmerc +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Geoportail - Monde +proj=mill +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MOP90 (Tetiaroa) Iles de la Societe - UTM fuseau 6 Sud +proj=tmerc +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [MURU59UTM7S] +# W [MURU62UTM7S] +# W [MURU78UTM7S] +# W [NC51UTM58S] +# W [NOVA53UTM38S] + +title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=IGN 1994 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Ouvea - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine - UTM fuseau 5 +proj=tmerc +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [RAIV54UTM6S] +# W [RAIV66UTM6S] +# W [RANGI47U6S] +# W [RANGI59U6S] +# W [RANGI68U6S] + +title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 1 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.250000000 +lat_2=42.750000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 2 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.250000000 +lat_2=43.750000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 3 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.250000000 +lat_2=44.750000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 4 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.250000000 +lat_2=45.750000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 5 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.250000000 +lat_2=46.750000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 6 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.250000000 +lat_2=47.750000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 7 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.250000000 +lat_2=48.750000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 8 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.250000000 +lat_2=49.750000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 9 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.250000000 +lat_2=50.750000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs <> + +title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - Lambert Nouvelle Caledonie +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-21.499999999 +lon_0=166.000000000 +lat_1=-20.666666667 +lat_2=-22.333333333 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGPF - UTM fuseau 5 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGPF - UTM fuseau 6 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGPF - UTM fuseau 7 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGR92 UTM fuseau 40 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=SAT84 (Rurutu) Iles Australes - UTM fuseau 5 Sud +proj=tmerc +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Saint-Paul 1969 +proj=tmerc +towgs84=225.5710,-346.6080,-46.5670 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [TAKA69UTM6S] + +title=Tanna Bloc Sud - UTM fuseau 59 Sud +proj=tmerc +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <> +# W [TIKE50UTM6S] +# W [TIKE60UTM6S] + +title=Tubuai - Iles Australes - UTM fuseau 6 Sud +proj=tmerc +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [TURI69UTM7S] + +title=World Geodetic System 1972 UTM fuseau 01 Sud +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 01 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 02 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 02 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 03 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 03 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 04 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 04 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 05 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 05 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 06 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 06 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 07 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 07 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 08 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 08 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 09 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 09 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 10 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 10 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 11 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 11 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 12 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 12 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 13 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 13 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 14 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 14 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 15 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 15 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 16 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 16 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 17 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 17 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 18 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 18 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 19 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 19 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 21 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 21 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 22 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 22 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 23 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 23 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 24 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 24 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 25 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 25 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 30d a 24d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 26 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 26 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 24d a 18d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 27 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 27 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 18d a 12d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 28 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 28 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 12d a 6d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 29 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 29 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=European Datum 1950 UTM fuseau 30 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de -6d a 0d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGF93 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 30 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1972 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 30 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=European Datum 1950 UTM fuseau 31 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 0d a 6d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGF93 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 31 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1972 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 31 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=European Datum 1950 UTM fuseau 32 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 6d a 12d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGF93 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 32 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1972 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 32 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 12d a 18d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 33 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 33 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 18d a 24d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 34 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 34 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 24d a 30d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 35 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 35 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 30d a 36d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 36 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 36 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 36d a 42d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 37 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 37 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 42d a 48d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 38 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 38 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 39 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 40 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 40 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 41 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 41 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 42 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 43 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 44 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 44 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 45 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 45 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 46 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 46 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 47 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 47 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 48 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 48 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 49 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 49 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 50 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 50 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 51 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 51 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 52 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 52 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 53 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 53 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 54 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 54 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 55 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 55 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 56 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 56 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 57 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 57 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 58 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 58 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 59 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 59 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 60 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 60 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> +# W [VAITAPEUTM5S] +# W [WALL76UTM1S] + +title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> diff --git a/proj4/nad/Makefile.am b/proj4/nad/Makefile.am new file mode 100644 index 000000000000..e43791088f22 --- /dev/null +++ b/proj4/nad/Makefile.am @@ -0,0 +1,90 @@ +# Executables paths passed to test scripts +NADPATH = $(top_srcdir)/nad +EXEPATH = ../src +PROJEXE = $(EXEPATH)/proj +CS2CSEXE = $(EXEPATH)/cs2cs + +# PROJ.4 test scripts +TEST27 = $(NADPATH)/test27 +TEST83 = $(NADPATH)/test83 +TESTNTV2 = $(NADPATH)/testntv2 +TESTVARIOUS = $(NADPATH)/testvarious +TESTFLAKY = $(NADPATH)/testflaky +TESTDATUMFILE = $(NADPATH)/testdatumfile +TESTIGN = $(NADPATH)/testIGNF + +pkgdata_DATA = GL27 nad.lst proj_def.dat nad27 nad83 world epsg esri \ + esri.extra other.extra \ + CH IGNF + +EXTRA_DIST = GL27 nad.lst proj_def.dat nad27 nad83 pj_out27.dist pj_out83.dist td_out.dist \ + test27 test83 world epsg esri tv_out.dist tf_out.dist \ + testflaky testvarious testdatumfile testntv2 ntv2_out.dist \ + esri.extra other.extra \ + CH IGNF testIGNF proj_outIGNF.dist \ + makefile.vc CMakeLists.txt + +process-nad2bin: + @if [ -f $(NADPATH)/null.lla -a ! -f null ] || [ -f $(NADPATH)/conus.lla -a ! -f conus ] ; then \ + for x in $(NADPATH)/*.lla ; do \ + DEST=`basename $$x .lla`; \ + echo "../src/nad2bin$(EXEEXT) $$DEST < $$x"; \ + ../src/nad2bin$(EXEEXT) $$DEST < $$x ; \ + done; \ + fi + +install-data-local: process-nad2bin + $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) + @if [ -f $(NADPATH)/null.lla -a ! -f $(NADPATH)/null ] || [ -f $(NADPATH)/conus.lla -a ! -f $(NADPATH)/conus ] ; then \ + for x in $(NADPATH)/*.lla ; do \ + DEST=$(DESTDIR)$(pkgdatadir)/`basename $$x .lla`; \ + echo "../src/nad2bin$(EXEEXT) $$DEST < $$x"; \ + ../src/nad2bin$(EXEEXT) $$DEST < $$x ; \ + if [ $$? -ne 0 ] ; then \ + echo "nad2bin$(EXEEXT) failed to install $$DEST"; \ + exit 1; \ + fi; \ + done; \ + else \ + echo "nad2nad NADCON source files not present"; \ + fi + @for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy \ + $(NADPATH)/alaska $(NADPATH)/conus $(NADPATH)/hawaii $(NADPATH)/null \ + $(NADPATH)/prvi $(NADPATH)/stgeorge $(NADPATH)/stlrnc $(NADPATH)/stpaul \ + $(NADPATH)/FL $(NADPATH)/MD $(NADPATH)/TN $(NADPATH)/WI $(NADPATH)/WO; do \ + if test "$$gridfile" != "dummy" -a -f "$$gridfile" ; then \ + echo $(INSTALL_DATA) $$gridfile $(DESTDIR)$(pkgdatadir)/`basename $$gridfile`; \ + $(INSTALL_DATA) $$gridfile $(DESTDIR)$(pkgdatadir)/`basename $$gridfile`; \ + fi; \ + done + +check-local: process-nad2bin +# Check if we are doing an out-of-tree build + @if test ! -f epsg; then \ + for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy ; do \ + if test "$$gridfile" != "dummy" -a -f "$$gridfile" ; then \ + cp $$gridfile .; \ + fi; \ + done; \ + for gridfile in $(pkgdata_DATA); do \ + cp $(NADPATH)/$$gridfile .; \ + done; \ + fi + $(TEST27) $(PROJEXE) + $(TEST83) $(PROJEXE) + PROJ_LIB=. $(TESTVARIOUS) $(CS2CSEXE) + @if [ -f conus ] ; then \ + export PROJ_LIB=. ; \ + $(TESTDATUMFILE) $(CS2CSEXE) ; \ + fi + @if [ -f ntf_r93.gsb ] ; then \ + export PROJ_LIB=. ; \ + $(TESTIGN) $(CS2CSEXE) ; \ + fi + @if [ -f ntv2_0.gsb ] ; then \ + export PROJ_LIB=. ; \ + $(TESTNTV2) $(CS2CSEXE) ; \ + fi + +clean-local: + $(RM) $(TEST_DB) diff --git a/proj4/nad/README b/proj4/nad/README new file mode 100644 index 000000000000..8a22721e451b --- /dev/null +++ b/proj4/nad/README @@ -0,0 +1,72 @@ + @(#)README 4.4 93/09/26 GIE REL" + +The files in this directory are support data for PROJ.4 programs +as well as test scripts for testing proj installation. + +File Contents: + +README --- This file + +proj_def.dat --- basic default file used by proj. + +epsg --- Translation of EPSG GCS/PCS codes into PROJ.4 via init= mechanism. + +epsg-deprecated --- EPSG definitions that have been deprecated. They are + not part of 'epsg' anymore, but may have been delivered + with earlier versions of 'epsg'. + Thus, they might occur e.g. in WMS (Web Mapping Services) + running with old EPSG definitions. + This file is not complete at all - it contains just + definitions that were individually reported. + +nad27 --- North American Datum 1927 for "init=" definition of + State Plane Coordinate Systems (SPCS). + +nad83 --- North American Datum 1983 for "init=" definition of SPCS. + +GL27 --- Great Lakes Survey grids, NAD27 + +world --- Proj specifications for several international grid systems. + +nad.lst --- Reference list of SPCS States and NGS datum identifiers + +IGNF --- Translation of French Mapping Agency codes into PROJ.4 via init= mechanism. + +nad2bin.c --- C program to convert above ASCII files into binary + files usable by program nad2nad. Compiled and used in + install script only. + +install --- Unix shell (sh) script to install nad2nad file and proj + init files. Read beginning for usage instructions. + +test27 --- Unix shell (sh) scripts to test installation of +test83 proj and nad27/nad83 init files. These scripts + expect release 4 proj to reside in ../src. + +pj_out27 --- Comparison files for above test procedures. +pj_out83 + +The following NADCON conversion files are distributed in separate, +uncompressed distibution file(s). + + Ascii source (in delta format) of grid data to convert geographic + coordinates from NAD27 to NAD83 +alaska.lla.Z --- Alaska +conus.lla.Z --- Conterminous U.S. +hawaii.lla.Z --- Hawaii +prvi.lla.Z --- Puerto Rico, Virgin Is. +stgeorge.lla.Z --- St. George Is, Alaska +stlrnc.lla.Z --- St. Lawrence Is., Alaska +stpaul.lla.Z --- St. Paul Is., Alaska + + Ascii source (in delta format) of grid data for high precision + conversion of geographic coordinates from NAD83 to NAD83 +FL.lla.Z --- Florida +MD.lla.Z --- Maryland +TN.lla.Z --- Tennessee +WI.lla.Z --- Wisconsin +WO.lla.Z --- Washington, Oregon, N. California + + Other grid shift files +ntv1_can.dat --- Canadian NTv1 grid shift file (NAD27-->NAD83) +ntf_r93.gsb --- French NTv2 grid shift file (NTF-->RGF93) diff --git a/proj4/nad/README.GRD b/proj4/nad/README.GRD new file mode 100644 index 000000000000..1ecf4b22b307 --- /dev/null +++ b/proj4/nad/README.GRD @@ -0,0 +1,48 @@ + Grid Shift File Formats + ======================= + + +ASCII .lla +---------- + +First line: comment, at most 80 characters in length. + +Second line: + + + + +Angles are in decimal degrees. + + +Subsequent lines are: + +: * + +The is zero based, and will vary from 0 to -1. The +number of x/y shift pairs will match . Grid lines can be +split over multiple physical text lines. Use the colon to identify starts +of new grid lines. The shift values are in millionths of a secondc of arc. + + +For example, from MD.lla: + +Maryland - HP + 25 17 1 -80.00000 .25000 37.00000 .25000 +0: 5107 -2502 -700 496 -656 468 -587 418 -481 347 -325 256 -111 152 166 50 +493 -37 854 -96 1221 -118 1568 -125 1953 -143 2433 -195 2464 -281 2529 -395 +1987 -729 447 -916 -3011 -1181 -5559 -406 -6094 541 -5714 1110 -5247 1289 +-4993 1254 -4960 1151 +1: 4757 -1695 -644 429 -627 411 -602 368 -555 299 -470 206 -328 96 -125 -15 +126 -105 391 -146 634 -120 762 -58 911 -13 1583 -8 1049 -28 1451 123 1377 -464 +907 -603 -4056 -1955 -6769 -485 -5797 929 -4254 1413 -3251 1295 -2871 993 +-2899 724 + + +The grid is 25x7, and covers the region with a lower left corner of +80d00'W 37d00'N and an upper right corner of 73d45'W 43d15'N. + + +BINARY +------ + diff --git a/proj4/nad/epsg b/proj4/nad/epsg new file mode 100644 index 000000000000..aec383a90fef --- /dev/null +++ b/proj4/nad/epsg @@ -0,0 +1,11100 @@ +# HD1909 +<3819> +proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs <> +# TWD67 +<3821> +proj=longlat +ellps=aust_SA +no_defs <> +# TWD97 +<3824> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# IGRS +<3889> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# MGI 1901 +<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 +<4002> +proj=longlat +ellps=mod_airy +no_defs <> +# Unknown datum based upon the Australian National Spheroid +<4003> +proj=longlat +ellps=aust_SA +no_defs <> +# Unknown datum based upon the Bessel 1841 ellipsoid +<4004> +proj=longlat +ellps=bessel +no_defs <> +# Unknown datum based upon the Bessel Modified ellipsoid +<4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs <> +# Unknown datum based upon the Bessel Namibia ellipsoid +<4006> +proj=longlat +ellps=bess_nam +no_defs <> +# Unknown datum based upon the Clarke 1858 ellipsoid +<4007> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> +# Unknown datum based upon the Clarke 1866 ellipsoid +<4008> +proj=longlat +ellps=clrk66 +no_defs <> +# Unknown datum based upon the Clarke 1866 Michigan ellipsoid +<4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> +# Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid +<4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs <> +# Unknown datum based upon the Clarke 1880 (IGN) ellipsoid +<4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +# Unknown datum based upon the Clarke 1880 (RGS) ellipsoid +<4012> +proj=longlat +ellps=clrk80 +no_defs <> +# Unknown datum based upon the Clarke 1880 (Arc) ellipsoid +<4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> +# Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid +<4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs <> +# Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid +<4015> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> +# Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid +<4016> +proj=longlat +ellps=evrstSS +no_defs <> +# Unknown datum based upon the Everest 1830 Modified ellipsoid +<4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs <> +# Unknown datum based upon the GRS 1980 ellipsoid +<4019> +proj=longlat +ellps=GRS80 +no_defs <> +# Unknown datum based upon the Helmert 1906 ellipsoid +<4020> +proj=longlat +ellps=helmert +no_defs <> +# Unknown datum based upon the Indonesian National Spheroid +<4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> +# Unknown datum based upon the International 1924 ellipsoid +<4022> +proj=longlat +ellps=intl +no_defs <> +# MOLDREF99 +<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 +<4025> +proj=longlat +ellps=WGS66 +no_defs <> +# Unknown datum based upon the Plessis 1817 ellipsoid +<4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs <> +# Unknown datum based upon the Struve 1860 ellipsoid +<4028> +proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs <> +# Unknown datum based upon the War Office ellipsoid +<4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> +# Unknown datum based upon the WGS 84 ellipsoid +<4030> +proj=longlat +ellps=WGS84 +no_defs <> +# Unknown datum based upon the GEM 10C ellipsoid +<4031> +proj=longlat +ellps=WGS84 +no_defs <> +# Unknown datum based upon the OSU86F ellipsoid +<4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs <> +# Unknown datum based upon the OSU91A ellipsoid +<4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs <> +# Unknown datum based upon the Clarke 1880 ellipsoid +<4034> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> +# Unknown datum based upon the Authalic Sphere +<4035> +proj=longlat +a=6371000 +b=6371000 +no_defs <> +# Unknown datum based upon the GRS 1967 ellipsoid +<4036> +proj=longlat +ellps=GRS67 +no_defs <> +# Unknown datum based upon the Average Terrestrial System 1977 ellipsoid +<4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> +# Unknown datum based upon the Everest (1830 Definition) ellipsoid +<4042> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> +# Unknown datum based upon the WGS 72 ellipsoid +<4043> +proj=longlat +ellps=WGS72 +no_defs <> +# Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid +<4044> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> +# Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid +<4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs <> +# RGRDC 2005 +<4046> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Unspecified datum based upon the GRS 1980 Authalic Sphere +<4047> +proj=longlat +a=6371007 +b=6371007 +no_defs <> +# Unspecified datum based upon the Clarke 1866 Authalic Sphere +<4052> +proj=longlat +a=6370997 +b=6370997 +no_defs <> +# Unspecified datum based upon the International 1924 Authalic Sphere +<4053> +proj=longlat +a=6371228 +b=6371228 +no_defs <> +# Unspecified datum based upon the Hughes 1980 ellipsoid +<4054> +proj=longlat +a=6378273 +b=6356889.449 +no_defs <> +# Popular Visualisation CRS +<4055> +proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# SREF98 +<4075> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# REGCAN95 +<4081> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Greek +<4120> +proj=longlat +ellps=bessel +no_defs <> +# GGRS87 +<4121> +proj=longlat +datum=GGRS87 +no_defs <> +# ATS77 +<4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> +# KKJ +<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 +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 +towgs84=-80,-100,-228,0,0,0,0 +no_defs <> +# Madzansua +<4128> +proj=longlat +ellps=clrk66 +no_defs <> +# Observatario +<4129> +proj=longlat +ellps=clrk66 +towgs84=-132,-110,-335,0,0,0,0 +no_defs <> +# 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 +towgs84=198,881,317,0,0,0,0 +no_defs <> +# FD58 +<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 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006 +no_defs <> +# Old Hawaiian +<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 +<4137> +proj=longlat +ellps=clrk66 +no_defs <> +# St. George Island +<4138> +proj=longlat +ellps=clrk66 +no_defs <> +# Puerto Rico +<4139> +proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs <> +# NAD83(CSRS98) +<4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Israel 1993 +<4141> +proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs <> +# Locodjo 1965 +<4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs <> +# 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 +towgs84=214,804,268,0,0,0,0 +no_defs <> +# Kalianpur 1962 +<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 +<4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs <> +# Hartebeesthoek94 +<4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# CH1903 +<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 +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 +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 +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 +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs <> +# ELD79 +<4159> +proj=longlat +ellps=intl +towgs84=-115.8543,-99.0583,-152.4616,0,0,0,0 +no_defs <> +# Chos Malal 1914 +<4160> +proj=longlat +ellps=intl +no_defs <> +# Pampa del Castillo +<4161> +proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs <> +# Korean 1985 +<4162> +proj=longlat +ellps=bessel +no_defs <> +# Yemen NGN96 +<4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# South Yemen +<4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs <> +# Bissau +<4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs <> +# Korean 1995 +<4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# 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 +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 +<4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# RGF93 +<4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# POSGAR +<4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# IRENET95 +<4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Sierra Leone 1924 +<4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> +# Sierra Leone 1968 +<4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs <> +# 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 +towgs84=26,-121,-78,0,0,0,0 +no_defs <> +# Pulkovo 1942(58) +<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=-189.6806,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs <> +# Azores Occidental 1939 +<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 +<4184> +proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs <> +# Madeira 1936 +<4185> +proj=longlat +ellps=intl +no_defs <> +# OSNI 1952 +<4188> +proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <> +# REGVEN +<4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# POSGAR 98 +<4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Albanian 1987 +<4191> +proj=longlat +ellps=krass +towgs84=-44.183,-0.58,-38.489,-2.3867,-2.7072,3.5196,-8.2703 +no_defs <> +# Douala 1948 +<4192> +proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs <> +# 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 +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 +<4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs <> +# Garoua +<4197> +proj=longlat +ellps=clrk80 +no_defs <> +# Kousseri +<4198> +proj=longlat +ellps=clrk80 +no_defs <> +# Egypt 1930 +<4199> +proj=longlat +ellps=intl +no_defs <> +# Pulkovo 1995 +<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 +towgs84=-166,-15,204,0,0,0,0 +no_defs <> +# AGD66 +<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 +towgs84=-134,-48,149,0,0,0,0 +no_defs <> +# Ain el Abd +<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 +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs <> +# Aratu +<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 +towgs84=-143,-90,-294,0,0,0,0 +no_defs <> +# Arc 1960 +<4210> +proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs <> +# Batavia +<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 +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 +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 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs <> +# Campo Inchauspe +<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 +towgs84=-136,-108,-292,0,0,0,0 +no_defs <> +# Carthage +<4223> +proj=longlat +datum=carthage +no_defs <> +# Chua +<4224> +proj=longlat +ellps=intl +towgs84=-143.87,243.37,-33.52,0,0,0,0 +no_defs <> +# Corrego Alegre 1970-72 +<4225> +proj=longlat +ellps=intl +towgs84=-205.57,168.77,-4.12,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 +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 +towgs84=-130,110,-13,0,0,0,0 +no_defs <> +# ED50 +<4230> +proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs <> +# ED87 +<4231> +proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.005693,-0.044698,0.044285,0.1218 +no_defs <> +# Fahud +<4232> +proj=longlat +ellps=clrk80 +towgs84=-333.102,-11.02,230.69,0,0,0.554,0.219 +no_defs <> +# Gandajika 1970 +<4233> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> +# Garoua +<4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +# Guyane Francaise +<4235> +proj=longlat +ellps=intl +no_defs <> +# 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 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs <> +# ID74 +<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 +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 +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 +<4244> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs <> +# Kertau 1968 +<4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs <> +# KOC +<4246> +proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs <> +# 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 +towgs84=-288,175,-376,0,0,0,0 +no_defs <> +# Lake +<4249> +proj=longlat +ellps=intl +no_defs <> +# Leigon +<4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs <> +# Liberia 1964 +<4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs <> +# Lome +<4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +# Luzon 1911 +<4253> +proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs <> +# Hito XVIII 1963 +<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 +<4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs <> +# 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 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Malongo 1987 +<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 +<4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs <> +# Massawa +<4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs <> +# Minna +<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 +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 +towgs84=-74,-130,42,0,0,0,0 +no_defs <> +# NAD27 +<4267> +proj=longlat +datum=NAD27 +no_defs <> +# NAD27 Michigan +<4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> +# NAD83 +<4269> +proj=longlat +datum=NAD83 +no_defs <> +# Nahrwan 1967 +<4270> +proj=longlat +ellps=clrk80 +towgs84=-249,-156,381,0,0,0,0 +no_defs <> +# Naparima 1972 +<4271> +proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs <> +# NZGD49 +<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 +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 +datum=OSGB36 +no_defs <> +# OSGB70 +<4278> +proj=longlat +ellps=airy +no_defs <> +# OS(SN)80 +<4279> +proj=longlat +ellps=airy +no_defs <> +# Padang +<4280> +proj=longlat +ellps=bessel +no_defs <> +# Palestine 1923 +<4281> +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.7224,94.7824,340.8944,-8.001,-4.42,-11.821,1 +no_defs <> +# Pointe Noire +<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 +towgs84=23.92,-141.27,-80.9,0,0.35,0.82,-0.12 +no_defs <> +# Qatar 1974 +<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 +<4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs <> +# Loma Quintana +<4288> +proj=longlat +ellps=intl +no_defs <> +# Amersfoort +<4289> +proj=longlat +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957,0.343988,-1.87740,4.0725 +no_defs <> +# SAD69 +<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 +towgs84=616,97,-251,0,0,0,0 +no_defs <> +# Segora +<4294> +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs <> +# Serindung +<4295> +proj=longlat +ellps=bessel +no_defs <> +# Sudan +<4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +# Tananarive +<4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs <> +# Timbalai 1948 +<4298> +proj=longlat +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +no_defs <> +# TM65 +<4299> +proj=longlat +datum=ire65 +no_defs <> +# TM75 +<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 +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs <> +# Trinidad 1903 +<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 +<4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs <> +# Bern 1938 +<4306> +proj=longlat +ellps=bessel +no_defs <> +# Nord Sahara 1959 +<4307> +proj=longlat +ellps=clrk80 +towgs84=-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547 +no_defs <> +# RT38 +<4308> +proj=longlat +ellps=bessel +no_defs <> +# Yacare +<4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs <> +# Yoff +<4310> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-30,190,89,0,0,0,0 +no_defs <> +# Zanderij +<4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs <> +# MGI +<4312> +proj=longlat +datum=hermannskogel +no_defs <> +# Belge 1972 +<4313> +proj=longlat +ellps=intl +towgs84=-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747 +no_defs <> +# DHDN +<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 +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs <> +# Dealul Piscului 1970 +<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 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs <> +# WGS 72 +<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 +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 <> +# Mexico ITRF92 +<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 +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 +<4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs <> +# 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 +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 +<4607> +proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs <> +# NAD27(76) +<4608> +proj=longlat +ellps=clrk66 +no_defs <> +# NAD27(CGQ77) +<4609> +proj=longlat +ellps=clrk66 +no_defs <> +# Xian 1980 +<4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs <> +# Hong Kong 1980 +<4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.243649,-1.158827,-1.094246 +no_defs <> +# JGD2000 +<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Segara +<4613> +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs <> +# QND95 +<4614> +proj=longlat +ellps=intl +towgs84=-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,3.657065 +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 +towgs84=-289,-124,60,0,0,0,0 +no_defs <> +# NAD83(CSRS) +<4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# SAD69 +<4618> +proj=longlat +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +no_defs <> +# SWEREF99 +<4619> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Point 58 +<4620> +proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs <> +# Fort Marigot +<4621> +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs <> +# Guadeloupe 1948 +<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=0,0,0,0,0,0,0 +no_defs <> +# Martinique 1938 +<4625> +proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs <> +# Reunion 1947 +<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 +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 +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 +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs <> +# IGN72 Grand Terre +<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 +<4636> +proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs <> +# Perroud 1950 +<4637> +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs <> +# 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 +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 +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs <> +# ST84 Ile des Pins +<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.7002 +no_defs <> +# NEA74 Noumea +<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 +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 +<4658> +proj=longlat +ellps=intl +towgs84=-73,47,-83,0,0,0,0 +no_defs <> +# 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.6087,552.753,-540.873,6.6816266,-31.6114924,-19.84816,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 +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs <> +# Porto Santo 1995 +<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 +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs <> +# Azores Central 1995 +<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 +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 +<4668> +proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs <> +# LKS94 +<4669> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# IGM95 +<4670> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Voirol 1879 +<4671> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +# Chatham Islands 1971 +<4672> +proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs <> +# Chatham Islands 1979 +<4673> +proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,0,0,0.554,0.2263 +no_defs <> +# SIRGAS 2000 +<4674> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Guam 1963 +<4675> +proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs <> +# Vientiane 1982 +<4676> +proj=longlat +ellps=krass +no_defs <> +# Lao 1993 +<4677> +proj=longlat +ellps=krass +no_defs <> +# Lao 1997 +<4678> +proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs <> +# Jouik 1961 +<4679> +proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs <> +# Nouakchott 1965 +<4680> +proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs <> +# Mauritania 1999 +<4681> +proj=longlat +ellps=clrk80 +no_defs <> +# Gulshan 303 +<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 +<4684> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> +# Gandajika +<4685> +proj=longlat +ellps=intl +no_defs <> +# MAGNA-SIRGAS +<4686> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# RGPF +<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.125,2623.922,-33.8875,70.6773,-9.3943,186.074 +no_defs <> +# IGN63 Hiva Oa +<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 +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 +<4692> +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs <> +# Nakhl-e Ghanem +<4693> +proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs <> +# POSGAR 94 +<4694> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Katanga 1955 +<4695> +proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs <> +# Kasai 1953 +<4696> +proj=longlat +ellps=clrk80 +no_defs <> +# IGC 1962 6th Parallel South +<4697> +proj=longlat +ellps=clrk80 +no_defs <> +# IGN 1962 Kerguelen +<4698> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> +# Le Pouce 1934 +<4699> +proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs <> +# IGN Astro 1960 +<4700> +proj=longlat +ellps=clrk80 +no_defs <> +# IGCB 1955 +<4701> +proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs <> +# Mauritania 1999 +<4702> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Mhast 1951 +<4703> +proj=longlat +ellps=clrk80 +no_defs <> +# Mhast (onshore) +<4704> +proj=longlat +ellps=intl +no_defs <> +# Mhast (offshore) +<4705> +proj=longlat +ellps=intl +no_defs <> +# Egypt Gulf of Suez S-650 TL +<4706> +proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs <> +# Tern Island 1961 +<4707> +proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs <> +# Cocos Islands 1965 +<4708> +proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs <> +# Iwo Jima 1945 +<4709> +proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs <> +# St. Helena 1971 +<4710> +proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs <> +# Marcus Island 1952 +<4711> +proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs <> +# Ascension Island 1958 +<4712> +proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs <> +# Ayabelle Lighthouse +<4713> +proj=longlat +ellps=clrk80 +towgs84=-77,-128,142,0,0,0,0 +no_defs <> +# Bellevue +<4714> +proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs <> +# Camp Area Astro +<4715> +proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs <> +# Phoenix Islands 1966 +<4716> +proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs <> +# Cape Canaveral +<4717> +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs <> +# Solomon 1968 +<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 +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 +<4722> +proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs <> +# GCGD59 +<4723> +proj=longlat +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +no_defs <> +# Diego Garcia 1969 +<4724> +proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs <> +# Johnston Island 1961 +<4725> +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs <> +# SIGD61 +<4726> +proj=longlat +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +no_defs <> +# Midway 1961 +<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 +<4729> +proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs <> +# Santo 1965 +<4730> +proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs <> +# Viti Levu 1916 +<4731> +proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs <> +# Marshall Islands 1960 +<4732> +proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs <> +# Wake Island 1952 +<4733> +proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs <> +# Tristan 1968 +<4734> +proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs <> +# Kusaie 1951 +<4735> +proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs <> +# Deception Island +<4736> +proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs <> +# Korea 2000 +<4737> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Hong Kong 1963 +<4738> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> +# 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 +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=70.995,-335.916,262.898,0,0,0,0 +no_defs <> +# Nahrwan 1934 +<4744> +proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +no_defs <> +# RD/83 +<4745> +proj=longlat +ellps=bessel +no_defs <> +# PD/83 +<4746> +proj=longlat +ellps=bessel +no_defs <> +# GR96 +<4747> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Vanua Levu 1915 +<4748> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> +# RGNC91-93 +<4749> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# ST87 Ouvea +<4750> +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs <> +# Kertau (RSO) +<4751> +proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs <> +# Viti Levu 1912 +<4752> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=98,390,-22,0,0,0,0 +no_defs <> +# fk89 +<4753> +proj=longlat +ellps=intl +no_defs <> +# LGD2006 +<4754> +proj=longlat +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +no_defs <> +# DGN95 +<4755> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# VN-2000 +<4756> +proj=longlat +ellps=WGS84 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +no_defs <> +# SVY21 +<4757> +proj=longlat +ellps=WGS84 +no_defs <> +# JAD2001 +<4758> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# NAD83(NSRS2007) +<4759> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# WGS 66 +<4760> +proj=longlat +ellps=WGS66 +no_defs <> +# HTRS96 +<4761> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# BDA2000 +<4762> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Pitcairn 2006 +<4763> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# RSRGD2000 +<4764> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# 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 +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs <> +# Bogota 1975 (Bogota) +<4802> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs <> +# Lisbon (Lisbon) +<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 +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs <> +# Monte Mario (Rome) +<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) +<4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> +# Belge 1950 (Brussels) +<4809> +proj=longlat +ellps=intl +pm=brussels +no_defs <> +# Tananarive (Paris) +<4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs <> +# 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 +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 +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 +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs <> +# Nord Sahara 1959 (Paris) +<4819> +proj=longlat +ellps=clrk80 +towgs84=-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547 +pm=paris +no_defs <> +# Segara (Jakarta) +<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 <> +# 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 +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.695068,3.473016,-0.039338 +no_defs <> +# GDBD2009 +<5246> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +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=205,96,-98,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 +towgs84=-67.35,3.88,-38.22,0,0,0,0 +no_defs <> +# PNG94 +<5546> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# UCS-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 <> +# TGD2005 +<5886> +proj=longlat +ellps=GRS80 +no_defs <> +# CIGD11 +<6135> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Nepal 1981 +<6207> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=293.17,726.18,245.36,0,0,0,0 +no_defs <> +# CGRS93 +<6311> +proj=longlat +ellps=WGS84 +towgs84=8.846,-4.394,-1.122,-0.00237,-0.146528,0.130428,0.783926 +no_defs <> +# NAD83(2011) +<6318> +proj=longlat +ellps=GRS80 +no_defs <> +# NAD83(PA11) +<6322> +proj=longlat +ellps=GRS80 +no_defs <> +# NAD83(MA11) +<6325> +proj=longlat +ellps=GRS80 +no_defs <> +# Mexico ITRF2008 +<6365> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# JGD2011 +<6668> +proj=longlat +ellps=GRS80 +no_defs <> +# RDN2008 +<6706> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# NAD83(CORS96) +<6783> +proj=longlat +ellps=GRS80 +no_defs <> +# Aden 1925 +<6881> +proj=longlat +ellps=clrk80 +towgs84=-24,-203,268,0,0,0,0 +no_defs <> +# Bekaa Valley 1920 +<6882> +proj=longlat +ellps=clrk80 +towgs84=-183,-15,273,0,0,0,0 +no_defs <> +# Bioko +<6883> +proj=longlat +ellps=intl +towgs84=-235,-110,393,0,0,0,0 +no_defs <> +# South East Island 1943 +<6892> +proj=longlat +ellps=clrk80 +towgs84=-43.685,-179.785,-267.721,0,0,0,0 +no_defs <> +# Gambia +<6894> +proj=longlat +ellps=clrk80 +towgs84=-63,176,185,0,0,0,0 +no_defs <> +# IGD05 +<6980> +proj=longlat +ellps=GRS80 +no_defs <> +# IG05 Intermediate CRS +<6983> +proj=longlat +ellps=GRS80 +no_defs <> +# IGD05/12 +<6987> +proj=longlat +ellps=GRS80 +no_defs <> +# IG05/12 Intermediate CRS +<6990> +proj=longlat +ellps=GRS80 +no_defs <> +# RGSPM06 (lon-lat) +<7035> +proj=longlat +ellps=GRS80 +no_defs <> +# RGR92 (lon-lat) +<7037> +proj=longlat +ellps=GRS80 +no_defs <> +# RGM04 (lon-lat) +<7039> +proj=longlat +ellps=GRS80 +no_defs <> +# RGFG95 (lon-lat) +<7041> +proj=longlat +ellps=GRS80 +no_defs <> +# RGTAAF07 +<7073> +proj=longlat +ellps=GRS80 +no_defs <> +# RGF93 (lon-lat) +<7084> +proj=longlat +ellps=GRS80 +no_defs <> +# RGAF09 (lon-lat) +<7086> +proj=longlat +ellps=GRS80 +no_defs <> +# RGTAAF07 (lon-lat) +<7088> +proj=longlat +ellps=GRS80 +no_defs <> +# RGTAAF07 (lon-lat) +<7133> +proj=longlat +ellps=GRS80 +no_defs <> +# IGD05 +<7136> +proj=longlat +ellps=WGS84 +no_defs <> +# IGD05/12 +<7139> +proj=longlat +ellps=WGS84 +no_defs <> +# ONGD14 +<7373> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Kyrg-06 +<7686> +proj=longlat +ellps=GRS80 +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 +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 +<2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs <> +# 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 +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 (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 <> +# NAD27(CGQ77) / SCoPQ zone 4 +<2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / SCoPQ zone 5 +<2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / SCoPQ zone 6 +<2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / SCoPQ zone 7 +<2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / SCoPQ zone 8 +<2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / SCoPQ zone 9 +<2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / SCoPQ zone 10 +<2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 8 +<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 9 +<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 10 +<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 11 +<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 12 +<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 13 +<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 14 +<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 15 +<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 16 +<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / MTM zone 17 +<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / UTM zone 15N +<2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / UTM zone 16N +<2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / UTM zone 17N +<2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> +# NAD27(76) / UTM zone 18N +<2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / UTM zone 17N +<2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / UTM zone 18N +<2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / UTM zone 19N +<2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / UTM zone 20N +<2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> +# NAD27(CGQ77) / UTM zone 21N +<2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs <> +# NAD83(CSRS98) / New Brunswick Stereo (deprecated) +<2036> +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(CSRS98) / UTM zone 19N (deprecated) +<2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS98) / UTM zone 20N (deprecated) +<2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Israel 1993 / Israeli TM Grid +<2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs <> +# Locodjo 1965 / UTM zone 30N +<2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> +# Abidjan 1987 / UTM zone 30N +<2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> +# Locodjo 1965 / UTM zone 29N +<2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> +# Abidjan 1987 / UTM zone 29N +<2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> +# Hanoi 1972 / Gauss-Kruger zone 18 +<2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> +# 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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +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 +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs <> +# ED50(ED77) / UTM zone 39N +<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 +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs <> +# ED50(ED77) / UTM zone 41N +<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) +<2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,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 +towgs84=-115.8543,-99.0583,-152.4616,0,0,0,0 +units=m +no_defs <> +# ELD79 / UTM zone 32N +<2077> +proj=utm +zone=32 +ellps=intl +towgs84=-115.8543,-99.0583,-152.4616,0,0,0,0 +units=m +no_defs <> +# ELD79 / UTM zone 33N +<2078> +proj=utm +zone=33 +ellps=intl +towgs84=-115.8543,-99.0583,-152.4616,0,0,0,0 +units=m +no_defs <> +# ELD79 / UTM zone 34N +<2079> +proj=utm +zone=34 +ellps=intl +towgs84=-115.8543,-99.0583,-152.4616,0,0,0,0 +units=m +no_defs <> +# ELD79 / UTM zone 35N +<2080> +proj=utm +zone=35 +ellps=intl +towgs84=-115.8543,-99.0583,-152.4616,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 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 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 +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 +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 +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 +towgs84=-115.8543,-99.0583,-152.4616,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 +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 +<2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# South Yemen / Gauss Kruger zone 8 (deprecated) +<2091> +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 (deprecated) +<2092> +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 <> +# Hanoi 1972 / GK 106 NE +<2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> +# WGS 72BE / TM 106 NE +<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 / 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 / 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 / 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 +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 +<2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs <> +# Lake / Maracaibo Grid M3 +<2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs <> +# Lake / Maracaibo La Rosa Grid +<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs <> +# NZGD2000 / Mount Eden 2000 +<2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Bay of Plenty 2000 +<2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Poverty Bay 2000 +<2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Hawkes Bay 2000 +<2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Taranaki 2000 +<2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Tuhirangi 2000 +<2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Wanganui 2000 +<2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Wairarapa 2000 +<2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Wellington 2000 +<2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Collingwood 2000 +<2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Nelson 2000 +<2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Karamea 2000 +<2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Buller 2000 +<2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Grey 2000 +<2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Amuri 2000 +<2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Marlborough 2000 +<2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Hokitika 2000 +<2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Okarito 2000 +<2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Jacksons Bay 2000 +<2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Mount Pleasant 2000 +<2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Gawler 2000 +<2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Timaru 2000 +<2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Lindis Peak 2000 +<2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Mount Nicholas 2000 +<2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Mount York 2000 +<2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Observation Point 2000 +<2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / North Taieri 2000 +<2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Bluff 2000 +<2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / UTM zone 58S +<2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / UTM zone 59S +<2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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) +<2139> +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(CSRS98) / MTM zone 3 (deprecated) +<2140> +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(CSRS98) / MTM zone 4 (deprecated) +<2141> +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(CSRS98) / MTM zone 5 (deprecated) +<2142> +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(CSRS98) / MTM zone 6 (deprecated) +<2143> +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(CSRS98) / MTM zone 7 (deprecated) +<2144> +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(CSRS98) / MTM zone 8 (deprecated) +<2145> +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(CSRS98) / MTM zone 9 (deprecated) +<2146> +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(CSRS98) / MTM zone 10 (deprecated) +<2147> +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(CSRS98) / UTM zone 21N (deprecated) +<2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS98) / UTM zone 18N (deprecated) +<2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS98) / UTM zone 17N (deprecated) +<2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS98) / UTM zone 13N (deprecated) +<2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS98) / UTM zone 12N (deprecated) +<2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS98) / UTM zone 11N (deprecated) +<2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / Lambert-93 +<2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +<2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Sierra Leone 1924 / New Colony Grid +<2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> +# Sierra Leone 1924 / New War Office Grid +<2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> +# Sierra Leone 1968 / UTM zone 28N +<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 <> +# 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 +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 +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 +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=-189.6806,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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 (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 +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 +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 +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 +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 +towgs84=-44.183,-0.58,-38.489,-2.3867,-2.7072,3.5196,-8.2703 +units=m +no_defs <> +# ATS77 / New Brunswick Stereographic (ATS77) +<2200> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> +# REGVEN / UTM zone 18N +<2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# REGVEN / UTM zone 19N +<2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs <> +# Qornoq 1927 / UTM zone 23N +<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. +# +# ATS77 / UTM zone 19N +<2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> +# ATS77 / UTM zone 20N +<2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> +# Scoresbysund 1952 / Greenland zone 6 east +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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) +<2291> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> +# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) +<2292> +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 <> +# ATS77 / MTM Nova Scotia zone 4 +<2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> +# ATS77 / MTM Nova Scotia zone 5 +<2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> +# Ammassalik 1958 / Greenland zone 7 east +# Unable to translate coordinate system EPSG:2296 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 1 east (deprecated) +# Unable to translate coordinate system EPSG:2297 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 2 east (deprecated) +# Unable to translate coordinate system EPSG:2298 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 2 west +# Unable to translate coordinate system EPSG:2299 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 3 east (deprecated) +# Unable to translate coordinate system EPSG:2300 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 3 west +# Unable to translate coordinate system EPSG:2301 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 4 east (deprecated) +# Unable to translate coordinate system EPSG:2302 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 4 west +# Unable to translate coordinate system EPSG:2303 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 5 west +# Unable to translate coordinate system EPSG:2304 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 6 west +# Unable to translate coordinate system EPSG:2305 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 7 west +# Unable to translate coordinate system EPSG:2306 into PROJ.4 format. +# +# Qornoq 1927 / Greenland zone 8 east +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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.243649,-1.158827,-1.094246 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 13 +<2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 14 +<2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 15 +<2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 16 +<2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 17 +<2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 18 +<2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 19 +<2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 20 +<2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 21 +<2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 22 +<2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger zone 23 +<2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 75E +<2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 81E +<2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 87E +<2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 93E +<2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 99E +<2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 105E +<2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 111E +<2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 117E +<2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 123E +<2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 129E +<2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / Gauss-Kruger CM 135E +<2348> +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 <> +# Xian 1980 / 3-degree Gauss-Kruger zone 25 +<2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 26 +<2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 27 +<2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 28 +<2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 29 +<2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 30 +<2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 31 +<2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 32 +<2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 33 +<2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 34 +<2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 35 +<2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 36 +<2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 37 +<2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 38 +<2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 39 +<2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 40 +<2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 41 +<2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 42 +<2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 43 +<2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 44 +<2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 45 +<2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 75E +<2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 78E +<2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 81E +<2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 84E +<2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 87E +<2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 90E +<2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 93E +<2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 96E +<2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 99E +<2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 102E +<2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 105E +<2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 108E +<2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 111E +<2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 114E +<2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 117E +<2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 120E +<2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 123E +<2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 126E +<2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 129E +<2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 132E +<2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<2444> +proj=tmerc +lat_0=33 +lon_0=131 +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 III +<2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +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 IV +<2446> +proj=tmerc +lat_0=33 +lon_0=133.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 V +<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +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 VI +<2448> +proj=tmerc +lat_0=36 +lon_0=136 +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 VII +<2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +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 VIII +<2450> +proj=tmerc +lat_0=36 +lon_0=138.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 IX +<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +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 X +<2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +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 XI +<2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +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 XII +<2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +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 XIII +<2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +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 XIV +<2456> +proj=tmerc +lat_0=26 +lon_0=142 +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 XV +<2457> +proj=tmerc +lat_0=26 +lon_0=127.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 XVI +<2458> +proj=tmerc +lat_0=26 +lon_0=124 +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 XVII +<2459> +proj=tmerc +lat_0=26 +lon_0=131 +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 XVIII +<2460> +proj=tmerc +lat_0=20 +lon_0=136 +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 XIX +<2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +towgs84=-44.183,-0.58,-38.489,-2.3867,-2.7072,3.5196,-8.2703 +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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 +towgs84=-80,-100,-228,0,0,0,0 +units=m +no_defs <> +# Tete / UTM zone 37S +<2737> +proj=utm +zone=37 +south +ellps=clrk66 +towgs84=-80,-100,-228,0,0,0,0 +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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,3.657065 +units=m +no_defs <> +# Segara / UTM zone 50S +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 11N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 13N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 18N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 20N +<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 +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 +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 +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 +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 +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 +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 +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=0,0,0,0,0,0,0 +units=m +no_defs <> +# Martinique 1938 / UTM zone 20N +<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 +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 +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 +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 +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) +<2984> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Petrels 1972 / Terre Adelie Polar Stereographic +# Unable to translate coordinate system EPSG:2985 into PROJ.4 format. +# +# Perroud 1950 / Terre Adelie Polar Stereographic +# Unable to translate coordinate system EPSG:2986 into PROJ.4 format. +# +# 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 +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 +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs <> +# NAD83 / Oregon LCC (m) +<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 GIC 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 +datum=NAD83 +units=ft +no_defs <> +# NAD83(HARN) / Oregon LCC (m) +<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 GIC 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 +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 +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 +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.7002 +units=m +no_defs <> +# NEA74 Noumea / UTM zone 58S +<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 +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 +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 +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 +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 +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 +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 +<3007> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 13 30 +<3008> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 15 00 +<3009> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 16 30 +<3010> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 18 00 +<3011> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 14 15 +<3012> +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 15 45 +<3013> +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 17 15 +<3014> +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 18 45 +<3015> +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 20 15 +<3016> +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 21 45 +<3017> +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +<3026> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +# RT38 2.5 gon V +<3027> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +# RT38 0 gon +<3028> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +# RT38 2.5 gon O +<3029> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +# 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 +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 +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 +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 / 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. +# +# Hjorsey 1955 / Lambert 1955 +# Unable to translate coordinate system EPSG:3053 into PROJ.4 format. +# +# Hjorsey 1955 / UTM zone 26N +<3054> +proj=utm +zone=26 +ellps=intl +towgs84=-73,47,-83,0,0,0,0 +units=m +no_defs <> +# Hjorsey 1955 / UTM zone 27N +<3055> +proj=utm +zone=27 +ellps=intl +towgs84=-73,47,-83,0,0,0,0 +units=m +no_defs <> +# Hjorsey 1955 / UTM zone 28N +<3056> +proj=utm +zone=28 +ellps=intl +towgs84=-73,47,-83,0,0,0,0 +units=m +no_defs <> +# 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.6087,552.753,-540.873,6.6816266,-31.6114924,-19.84816,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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# Tokyo / UTM zone 51N +<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 +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 +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 +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 +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 +<3098> +proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# JGD2000 / UTM zone 53N +<3099> +proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# JGD2000 / UTM zone 54N +<3100> +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# JGD2000 / UTM zone 55N +<3101> +proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# American Samoa 1962 / American Samoa Lambert +<3102> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> +# Mauritania 1999 / UTM zone 28N (deprecated) +<3103> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> +# Mauritania 1999 / UTM zone 29N (deprecated) +<3104> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +<3112> +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / BCSG02 +<3113> +proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MAGNA-SIRGAS / Colombia Far West zone +<3114> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MAGNA-SIRGAS / Colombia West zone +<3115> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MAGNA-SIRGAS / Colombia Bogota zone +<3116> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MAGNA-SIRGAS / Colombia East Central zone +<3117> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MAGNA-SIRGAS / Colombia East zone +<3118> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +<3122> +proj=tmerc +lat_0=0 +lon_0=119 +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 3 +<3123> +proj=tmerc +lat_0=0 +lon_0=121 +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 4 +<3124> +proj=tmerc +lat_0=0 +lon_0=123 +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 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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. +# +# Viti Levu 1912 / Viti Levu Grid +<3140> +proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=98,390,-22,0,0,0,0 +units=link +no_defs <> +# Fiji 1956 / UTM zone 60S +<3141> +proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> +# 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 +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 (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 +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 +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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 7N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 9N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 14N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / UTM zone 16N +<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 +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 +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 +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 +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 +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 +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 +<3170> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 18N +<3178> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 19N +<3179> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 20N +<3180> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 21N +<3181> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 22N +<3182> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 23N +<3183> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 24N +<3184> +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 25N +<3185> +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 26N +<3186> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 27N +<3187> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 28N +<3188> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / UTM zone 29N +<3189> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 5 +<3190> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 6 +<3191> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 7 +<3192> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 8 +<3193> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 9 +<3194> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 10 +<3195> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 11 +<3196> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 12 +<3197> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / Libya TM zone 13 +<3198> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / UTM zone 32N +<3199> +proj=utm +zone=32 +ellps=intl +towgs84=-208.4058,-109.8777,-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 +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.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / UTM zone 34N +<3202> +proj=utm +zone=34 +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0,0,0,0 +units=m +no_defs <> +# LGD2006 / UTM zone 35N +<3203> +proj=utm +zone=35 +ellps=intl +towgs84=-208.4058,-109.8777,-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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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.125,2623.922,-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 +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 +<3306> +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs <> +# Nakhl-e Ghanem / UTM zone 39N +<3307> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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=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) +<3315> +proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> +# Kasai 1953 / Congo TM zone 22 +<3316> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# Kasai 1953 / Congo TM zone 24 +<3317> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 12 +<3318> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 14 +<3319> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 16 +<3320> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 18 +<3321> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 20 +<3322> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 22 +<3323> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 24 +<3324> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 26 +<3325> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# IGC 1962 / Congo TM zone 28 +<3326> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3340> +proj=tmerc +lat_0=0 +lon_0=14 +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 16 +<3341> +proj=tmerc +lat_0=0 +lon_0=16 +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 / UTM zone 33S +<3342> +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> +# Mauritania 1999 / UTM zone 28N +<3343> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mauritania 1999 / UTM zone 29N +<3344> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mauritania 1999 / UTM zone 30N +<3345> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +<3354> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> +# Egypt Gulf of Suez S-650 TL / Red Belt +<3355> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs <> +# Grand Cayman 1959 / UTM zone 17N (deprecated) +<3356> +proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=m +no_defs <> +# Little Cayman 1961 / UTM zone 17N (deprecated) +<3357> +proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3367> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> +# IGN Astro 1960 / UTM zone 29N +<3368> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> +# 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 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 60N +<3371> +proj=utm +zone=60 +datum=NAD27 +units=m +no_defs <> +# NAD83 / UTM zone 59N +<3372> +proj=utm +zone=59 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 60N +<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 +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 +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 +<3378> +proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs <> +# GDM2000 / Pahang Grid +<3379> +proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs <> +# GDM2000 / Selangor Grid +<3380> +proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs <> +# GDM2000 / Terengganu Grid +<3381> +proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs <> +# GDM2000 / Pinang Grid +<3382> +proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs <> +# GDM2000 / Kedah and Perlis Grid +<3383> +proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# GDM2000 / Perak Grid +<3384> +proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs <> +# 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 +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 +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 +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 +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.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=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=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=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 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs <> +# WGS 84 / World Mercator +<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 +<3397> +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 +<3398> +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 +<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 +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 +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 +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 +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 +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 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +units=m +no_defs <> +# VN-2000 / UTM zone 49N +<3406> +proj=utm +zone=49 +ellps=WGS84 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +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 <> +# 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 <> +# 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 <> +# NSIDC Sea Ice Polar Stereographic North +<3411> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> +# 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 +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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83 / Iowa North (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 (ftUS) +<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 +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 +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 +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 +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 +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 +datum=NAD83 +units=us-ft +no_defs <> +# PSD93 / UTM zone 39N +<3439> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006 +units=m +no_defs <> +# PSD93 / UTM zone 40N +<3440> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006 +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 +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 +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 +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 +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 +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 +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 +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 +<3449> +proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3466> +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(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 +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 +<3470> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 4 +<3471> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 5 +<3472> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 6 +<3473> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 7 +<3474> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 8 +<3475> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 9 +<3476> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Alaska zone 10 +<3477> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Arizona Central +<3478> +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(NSRS2007) / Arizona Central (ft) +<3479> +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(NSRS2007) / Arizona East +<3480> +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(NSRS2007) / Arizona East (ft) +<3481> +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(NSRS2007) / Arizona West +<3482> +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(NSRS2007) / Arizona West (ft) +<3483> +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(NSRS2007) / Arkansas North +<3484> +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(NSRS2007) / Arkansas North (ftUS) +<3485> +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(NSRS2007) / Arkansas South +<3486> +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(NSRS2007) / Arkansas South (ftUS) +<3487> +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(NSRS2007) / California Albers +<3488> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / California zone 1 +<3489> +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(NSRS2007) / California zone 1 (ftUS) +<3490> +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(NSRS2007) / California zone 2 +<3491> +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(NSRS2007) / California zone 2 (ftUS) +<3492> +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(NSRS2007) / California zone 3 +<3493> +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(NSRS2007) / California zone 3 (ftUS) +<3494> +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(NSRS2007) / California zone 4 +<3495> +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(NSRS2007) / California zone 4 (ftUS) +<3496> +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(NSRS2007) / California zone 5 +<3497> +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(NSRS2007) / California zone 5 (ftUS) +<3498> +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(NSRS2007) / California zone 6 +<3499> +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(NSRS2007) / California zone 6 (ftUS) +<3500> +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(NSRS2007) / Colorado Central +<3501> +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(NSRS2007) / Colorado Central (ftUS) +<3502> +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(NSRS2007) / Colorado North +<3503> +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(NSRS2007) / Colorado North (ftUS) +<3504> +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(NSRS2007) / Colorado South +<3505> +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(NSRS2007) / Colorado South (ftUS) +<3506> +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(NSRS2007) / Connecticut +<3507> +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(NSRS2007) / Connecticut (ftUS) +<3508> +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(NSRS2007) / Delaware +<3509> +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(NSRS2007) / Delaware (ftUS) +<3510> +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(NSRS2007) / Florida East +<3511> +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(NSRS2007) / Florida East (ftUS) +<3512> +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(NSRS2007) / Florida GDL Albers +<3513> +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(NSRS2007) / Florida North +<3514> +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(NSRS2007) / Florida North (ftUS) +<3515> +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(NSRS2007) / Florida West +<3516> +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(NSRS2007) / Florida West (ftUS) +<3517> +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(NSRS2007) / Georgia East +<3518> +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(NSRS2007) / Georgia East (ftUS) +<3519> +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(NSRS2007) / Georgia West +<3520> +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(NSRS2007) / Georgia West (ftUS) +<3521> +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(NSRS2007) / Idaho Central +<3522> +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(NSRS2007) / Idaho Central (ftUS) +<3523> +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(NSRS2007) / Idaho East +<3524> +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(NSRS2007) / Idaho East (ftUS) +<3525> +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(NSRS2007) / Idaho West +<3526> +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(NSRS2007) / Idaho West (ftUS) +<3527> +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(NSRS2007) / Illinois East +<3528> +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(NSRS2007) / Illinois East (ftUS) +<3529> +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(NSRS2007) / Illinois West +<3530> +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(NSRS2007) / Illinois West (ftUS) +<3531> +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(NSRS2007) / Indiana East +<3532> +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(NSRS2007) / Indiana East (ftUS) +<3533> +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(NSRS2007) / Indiana West +<3534> +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(NSRS2007) / Indiana West (ftUS) +<3535> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83(NSRS2007) / Iowa North +<3536> +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(NSRS2007) / Iowa North (ftUS) +<3537> +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(NSRS2007) / Iowa South +<3538> +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(NSRS2007) / Iowa South (ftUS) +<3539> +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(NSRS2007) / Kansas North +<3540> +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(NSRS2007) / Kansas North (ftUS) +<3541> +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(NSRS2007) / Kansas South +<3542> +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(NSRS2007) / Kansas South (ftUS) +<3543> +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(NSRS2007) / Kentucky North +<3544> +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(NSRS2007) / Kentucky North (ftUS) +<3545> +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(NSRS2007) / Kentucky Single Zone +<3546> +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(NSRS2007) / Kentucky Single Zone (ftUS) +<3547> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83(NSRS2007) / Kentucky South +<3548> +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(NSRS2007) / Kentucky South (ftUS) +<3549> +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(NSRS2007) / Louisiana North +<3550> +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(NSRS2007) / Louisiana North (ftUS) +<3551> +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(NSRS2007) / Louisiana South +<3552> +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(NSRS2007) / Louisiana South (ftUS) +<3553> +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(NSRS2007) / Maine CS2000 Central +<3554> +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) / Maine CS2000 East +<3555> +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(NSRS2007) / Maine CS2000 West +<3556> +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(NSRS2007) / Maine East +<3557> +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 +<3558> +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(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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3583> +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(NSRS2007) / Massachusetts Island (ftUS) +<3584> +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(NSRS2007) / Massachusetts Mainland +<3585> +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(NSRS2007) / Massachusetts Mainland (ftUS) +<3586> +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(NSRS2007) / Michigan Central +<3587> +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(NSRS2007) / Michigan Central (ft) +<3588> +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(NSRS2007) / Michigan North +<3589> +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(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 +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) +<3593> +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(NSRS2007) / Minnesota Central +<3594> +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(NSRS2007) / Minnesota North +<3595> +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(NSRS2007) / Minnesota South +<3596> +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(NSRS2007) / Mississippi East +<3597> +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(NSRS2007) / Mississippi East (ftUS) +<3598> +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(NSRS2007) / Mississippi West +<3599> +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(NSRS2007) / Mississippi West (ftUS) +<3600> +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(NSRS2007) / Missouri Central +<3601> +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(NSRS2007) / Missouri East +<3602> +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(NSRS2007) / Missouri West +<3603> +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(NSRS2007) / Montana +<3604> +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(NSRS2007) / Montana (ft) +<3605> +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(NSRS2007) / Nebraska +<3606> +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(NSRS2007) / Nevada Central +<3607> +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(NSRS2007) / Nevada Central (ftUS) +<3608> +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(NSRS2007) / Nevada East +<3609> +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(NSRS2007) / Nevada East (ftUS) +<3610> +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(NSRS2007) / Nevada West +<3611> +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(NSRS2007) / Nevada West (ftUS) +<3612> +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(NSRS2007) / New Hampshire +<3613> +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(NSRS2007) / New Hampshire (ftUS) +<3614> +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(NSRS2007) / New Jersey +<3615> +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(NSRS2007) / New Jersey (ftUS) +<3616> +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(NSRS2007) / New Mexico Central +<3617> +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(NSRS2007) / New Mexico Central (ftUS) +<3618> +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(NSRS2007) / New Mexico East +<3619> +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(NSRS2007) / New Mexico East (ftUS) +<3620> +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(NSRS2007) / New Mexico West +<3621> +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(NSRS2007) / New Mexico West (ftUS) +<3622> +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(NSRS2007) / New York Central +<3623> +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(NSRS2007) / New York Central (ftUS) +<3624> +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(NSRS2007) / New York East +<3625> +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(NSRS2007) / New York East (ftUS) +<3626> +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(NSRS2007) / New York Long Island +<3627> +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(NSRS2007) / New York Long Island (ftUS) +<3628> +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(NSRS2007) / New York West +<3629> +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(NSRS2007) / New York West (ftUS) +<3630> +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(NSRS2007) / North Carolina +<3631> +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(NSRS2007) / North Carolina (ftUS) +<3632> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83(NSRS2007) / North Dakota North +<3633> +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(NSRS2007) / North Dakota North (ft) +<3634> +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(NSRS2007) / North Dakota South +<3635> +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(NSRS2007) / North Dakota South (ft) +<3636> +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(NSRS2007) / Ohio North +<3637> +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(NSRS2007) / Ohio South +<3638> +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(NSRS2007) / Oklahoma North +<3639> +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(NSRS2007) / Oklahoma North (ftUS) +<3640> +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(NSRS2007) / Oklahoma South +<3641> +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(NSRS2007) / Oklahoma South (ftUS) +<3642> +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(NSRS2007) / Oregon LCC (m) +<3643> +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(NSRS2007) / Oregon GIC Lambert (ft) +<3644> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> +# NAD83(NSRS2007) / Oregon North +<3645> +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(NSRS2007) / Oregon North (ft) +<3646> +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(NSRS2007) / Oregon South +<3647> +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(NSRS2007) / Oregon South (ft) +<3648> +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(NSRS2007) / Pennsylvania North +<3649> +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(NSRS2007) / Pennsylvania North (ftUS) +<3650> +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(NSRS2007) / Pennsylvania South +<3651> +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(NSRS2007) / Pennsylvania South (ftUS) +<3652> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83(NSRS2007) / Rhode Island +<3653> +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(NSRS2007) / Rhode Island (ftUS) +<3654> +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 <> +# NAD83(NSRS2007) / South Carolina +<3655> +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(NSRS2007) / South Carolina (ft) +<3656> +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(NSRS2007) / South Dakota North +<3657> +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(NSRS2007) / South Dakota North (ftUS) +<3658> +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(NSRS2007) / South Dakota South +<3659> +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(NSRS2007) / South Dakota South (ftUS) +<3660> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83(NSRS2007) / Tennessee +<3661> +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(NSRS2007) / Tennessee (ftUS) +<3662> +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(NSRS2007) / Texas Central +<3663> +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(NSRS2007) / Texas Central (ftUS) +<3664> +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(NSRS2007) / Texas Centric Albers Equal Area +<3665> +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(NSRS2007) / Texas Centric Lambert Conformal +<3666> +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(NSRS2007) / Texas North +<3667> +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(NSRS2007) / Texas North (ftUS) +<3668> +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(NSRS2007) / Texas North Central +<3669> +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(NSRS2007) / Texas North Central (ftUS) +<3670> +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(NSRS2007) / Texas South +<3671> +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(NSRS2007) / Texas South (ftUS) +<3672> +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(NSRS2007) / Texas South Central +<3673> +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(NSRS2007) / Texas South Central (ftUS) +<3674> +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(NSRS2007) / Utah Central +<3675> +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(NSRS2007) / Utah Central (ft) +<3676> +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(NSRS2007) / Utah Central (ftUS) +<3677> +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(NSRS2007) / Utah North +<3678> +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(NSRS2007) / Utah North (ft) +<3679> +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(NSRS2007) / Utah North (ftUS) +<3680> +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(NSRS2007) / Utah South +<3681> +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(NSRS2007) / Utah South (ft) +<3682> +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(NSRS2007) / Utah South (ftUS) +<3683> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83(NSRS2007) / Vermont +<3684> +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(NSRS2007) / Virginia North +<3685> +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(NSRS2007) / Virginia North (ftUS) +<3686> +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(NSRS2007) / Virginia South +<3687> +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(NSRS2007) / Virginia South (ftUS) +<3688> +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(NSRS2007) / Washington North +<3689> +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(NSRS2007) / Washington North (ftUS) +<3690> +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(NSRS2007) / Washington South +<3691> +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(NSRS2007) / Washington South (ftUS) +<3692> +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(NSRS2007) / West Virginia North +<3693> +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(NSRS2007) / West Virginia South +<3694> +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(NSRS2007) / Wisconsin Central +<3695> +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(NSRS2007) / Wisconsin Central (ftUS) +<3696> +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(NSRS2007) / Wisconsin North +<3697> +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(NSRS2007) / Wisconsin North (ftUS) +<3698> +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(NSRS2007) / Wisconsin South +<3699> +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(NSRS2007) / Wisconsin South (ftUS) +<3700> +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 <> +# NAD83(NSRS2007) / Wisconsin Transverse Mercator +<3701> +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(NSRS2007) / Wyoming East +<3702> +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(NSRS2007) / Wyoming East Central +<3703> +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(NSRS2007) / Wyoming West Central +<3704> +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(NSRS2007) / Wyoming West +<3705> +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(NSRS2007) / UTM zone 59N +<3706> +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 60N +<3707> +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 1N +<3708> +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 2N +<3709> +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 3N +<3710> +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 4N +<3711> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 5N +<3712> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 6N +<3713> +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 7N +<3714> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 8N +<3715> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 9N +<3716> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 10N +<3717> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 11N +<3718> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 12N +<3719> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 13N +<3720> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 14N +<3721> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 15N +<3722> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 16N +<3723> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 17N +<3724> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / UTM zone 18N +<3725> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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) +<3729> +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(NSRS2007) / Wyoming East (ftUS) +<3730> +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(NSRS2007) / Wyoming East Central (ftUS) +<3731> +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(NSRS2007) / Wyoming West Central (ftUS) +<3732> +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(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 +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 +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 +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 +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 +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 +datum=NAD83 +units=us-ft +no_defs <> +# NAD83(HARN) / UTM zone 10N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(HARN) / UTM zone 12N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(HARN) / UTM zone 14N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(HARN) / UTM zone 16N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(HARN) / UTM zone 18N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(HARN) / UTM zone 4N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3765> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# HTRS96 / Croatia LCC +<3766> +proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# HTRS96 / UTM zone 33N +<3767> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3784> +proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs <> +# Popular Visualisation CRS / Mercator (deprecated) +<3785> +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 <> +# 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 +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 +<3789> +proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Antipodes Islands TM 2000 +<3790> +proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Raoul Island TM 2000 +<3791> +proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / Chatham Islands TM 2000 +<3793> +proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3825> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TWD97 / TM2 zone 121 +<3826> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TWD67 / TM2 zone 119 +<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 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<3846> +proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 / RT90 2.5 gon V emulation +<3847> +proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 / RT90 0 gon emulation +<3848> +proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 / RT90 2.5 gon O emulation +<3849> +proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SWEREF99 / RT90 5 gon O emulation +<3850> +proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NZGD2000 / NZCS2000 +<3851> +proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RSRGD2000 / DGLC2000 +<3852> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# County ST74 +<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 +<3891> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +<3942> +proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC43 +<3943> +proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC44 +<3944> +proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC45 +<3945> +proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC46 +<3946> +proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC47 +<3947> +proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC48 +<3948> +proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGF93 / CC49 +<3949> +proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 (deprecated) +<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 (deprecated) +<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 (deprecated) +<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 +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 +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 +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 <> +# Katanga 1955 / Katanga Gauss zone B +<3987> +proj=tmerc +lat_0=-9 +lon_0=28 +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 <> +# Katanga 1955 / Katanga Gauss zone C +<3988> +proj=tmerc +lat_0=-9 +lon_0=26 +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 <> +# Katanga 1955 / Katanga Gauss zone D +<3989> +proj=tmerc +lat_0=-9 +lon_0=24 +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 <> +# Puerto Rico State Plane CS of 1927 +<3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> +# Puerto Rico / St. Croix +<3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> +# Guam 1963 / Guam SPCS +# Unable to translate coordinate system EPSG:3993 into PROJ.4 format. +# +# WGS 84 / Mercator 41 +<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 +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 +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 +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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# WGS 84 / TMzn35N +<4037> +proj=utm +zone=35 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / TMzn36N +<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 +<4049> +proj=tmerc +lat_0=0 +lon_0=14 +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 16 +<4050> +proj=tmerc +lat_0=0 +lon_0=16 +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 18 +<4051> +proj=tmerc +lat_0=0 +lon_0=18 +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 20 +<4056> +proj=tmerc +lat_0=0 +lon_0=20 +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 22 +<4057> +proj=tmerc +lat_0=0 +lon_0=22 +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 24 +<4058> +proj=tmerc +lat_0=0 +lon_0=24 +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 26 +<4059> +proj=tmerc +lat_0=0 +lon_0=26 +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 28 +<4060> +proj=tmerc +lat_0=0 +lon_0=28 +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 / UTM zone 33S +<4061> +proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGRDC 2005 / UTM zone 34S +<4062> +proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +towgs84=-143.87,243.37,-33.52,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 +<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) +<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 <> +# Kertau 1968 / Johor Grid +<4390> +proj=cass +lat_0=2.042583333333333 +lon_0=103.5627583333333 +x_0=0 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Sembilan and Melaka Grid +<4391> +proj=cass +lat_0=2.712283333333334 +lon_0=101.9411666666667 +x_0=-242.005 +y_0=-948.547 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Pahang Grid +<4392> +proj=cass +lat_0=3.710972222222222 +lon_0=102.4361777777778 +x_0=0 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Selangor Grid +<4393> +proj=cass +lat_0=3.680344444444444 +lon_0=101.5082444444444 +x_0=-21759.438 +y_0=55960.906 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Terengganu Grid +<4394> +proj=cass +lat_0=4.946141666666667 +lon_0=102.8952083333333 +x_0=0 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Pinang Grid +<4395> +proj=cass +lat_0=5.421325 +lon_0=100.3458694444444 +x_0=0 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Kedah and Perlis Grid +<4396> +proj=cass +lat_0=5.965147222222223 +lon_0=100.6375944444444 +x_0=0 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Perak Revised Grid +<4397> +proj=cass +lat_0=4.859380555555555 +lon_0=100.8167666666667 +x_0=0 +y_0=133453.669 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# Kertau 1968 / Kelantan Grid +<4398> +proj=cass +lat_0=5.893922222222222 +lon_0=102.1772916666667 +x_0=0 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +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 (deprecated) +<4474> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF92 / UTM zone 11N +<4484> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF92 / UTM zone 12N +<4485> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF92 / UTM zone 13N +<4486> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF92 / UTM zone 14N +<4487> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF92 / UTM zone 15N +<4488> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF92 / 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.695068,3.473016,-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 +towgs84=0,0,0,0,0,0,0 +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=205,96,-98,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=205,96,-98,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=205,96,-98,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=205,96,-98,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=205,96,-98,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=205,96,-98,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 17N +<5463> +proj=utm +zone=17 +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,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 +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 21S +<5531> +proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 22S (deprecated) +<5532> +proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 23S +<5533> +proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 24S +<5534> +proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 25S +<5535> +proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +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=205,96,-98,0,0,0,0 +units=m +no_defs <> +# UCS-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 <> +# UCS-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 <> +# UCS-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 <> +# UCS-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 <> +# UCS-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 <> +# UCS-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 <> +# UCS-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 <> +# UCS-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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 7 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 8 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 9 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 10 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 11 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 12 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger zone 13 (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 21E (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 24E (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 27E (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 30E (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 33E (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 36E (deprecated) +<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 <> +# UCS-2000 / 3-degree Gauss-Kruger CM 39E (deprecated) +<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. +# +# EPSG topocentric example B +# Unable to translate coordinate system EPSG:5820 into PROJ.4 format. +# +# 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 +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 18S +<5875> +proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 19S +<5876> +proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 20S +<5877> +proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs <> +# Cadastre 1997 / UTM zone 38S +<5879> +proj=utm +zone=38 +south +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / Brazil Polyconic +<5880> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TGD2005 / Tonga Map Grid +<5887> +proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> +# JAXA Snow Depth Polar Stereographic North +<5890> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=90 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone A1 +<5921> +proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone A2 +<5922> +proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone A3 +<5923> +proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone A4 +<5924> +proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone A5 +<5925> +proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone B1 +<5926> +proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone B2 +<5927> +proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone B3 +<5928> +proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone B4 +<5929> +proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone B5 +<5930> +proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone C1 +<5931> +proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone C2 +<5932> +proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone C3 +<5933> +proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone C4 +<5934> +proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic Regional zone C5 +<5935> +proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Alaska Polar Stereographic +<5936> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=-150 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Canada Polar Stereographic +<5937> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=-100 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Greenland Polar Stereographic +<5938> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=-33 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Norway Polar Stereographic +<5939> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=18 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Russia Polar Stereographic +<5940> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=105 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 1-25 +<6050> +proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-30 +x_0=25500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 2-18 +<6051> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-52 +x_0=18500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 2-20 +<6052> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-12 +x_0=20500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 3-29 +<6053> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 3-31 +<6054> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-39 +x_0=31500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 3-33 +<6055> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-10 +x_0=33500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 4-20 +<6056> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-64 +x_0=20500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 4-22 +<6057> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-39 +x_0=22500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 4-24 +<6058> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-14 +x_0=24500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 5-41 +<6059> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-62 +x_0=41500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 5-43 +<6060> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-42 +x_0=43500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 5-45 +<6061> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-22 +x_0=45500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 6-26 +<6062> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-56 +x_0=26500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 6-28 +<6063> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-38 +x_0=28500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 6-30 +<6064> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-20 +x_0=30500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 7-11 +<6065> +proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-51 +x_0=11500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 7-13 +<6066> +proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-34 +x_0=13500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 8-20 +<6067> +proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-52 +x_0=20500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GR96 / EPSG Arctic zone 8-22 +<6068> +proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-37 +x_0=22500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 2-22 +<6069> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=16 +x_0=22500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 3-11 +<6070> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=21 +x_0=11500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 4-26 +<6071> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=10 +x_0=26500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 4-28 +<6072> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=34 +x_0=28500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 5-11 +<6073> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=14 +x_0=11500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 5-13 +<6074> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=34 +x_0=13500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 2-24 +<6075> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=53 +x_0=24500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 2-26 +<6076> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=93 +x_0=26500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 3-13 +<6077> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=52 +x_0=13500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 3-15 +<6078> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=83 +x_0=15500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 3-17 +<6079> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=114 +x_0=17500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 3-19 +<6080> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=145 +x_0=19500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-30 +<6081> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=58 +x_0=30500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-32 +<6082> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=82 +x_0=32500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-34 +<6083> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=106 +x_0=34500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-36 +<6084> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=130 +x_0=36500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-38 +<6085> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=154 +x_0=38500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-40 +<6086> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=179 +x_0=40500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-15 +<6087> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=54 +x_0=15500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-17 +<6088> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=74 +x_0=17500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-19 +<6089> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=95 +x_0=19500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-21 +<6090> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=116 +x_0=21500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-23 +<6091> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=137 +x_0=23500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-25 +<6092> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=158 +x_0=25500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 5-27 +<6093> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=179 +x_0=27500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# NAD83(NSRS2007) / EPSG Arctic zone 5-29 +<6094> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-163 +x_0=29500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / EPSG Arctic zone 5-31 +<6095> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-147 +x_0=31500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / EPSG Arctic zone 6-14 +<6096> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-165 +x_0=14500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / EPSG Arctic zone 6-16 +<6097> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-147 +x_0=16500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 1-23 +<6098> +proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-90 +x_0=23500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 2-14 +<6099> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-115 +x_0=14500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 2-16 +<6100> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-75 +x_0=16500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 3-25 +<6101> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-129 +x_0=25500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 3-27 +<6102> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-99 +x_0=27500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 3-29 +<6103> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 4-14 +<6104> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-129 +x_0=14500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 4-16 +<6105> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-104 +x_0=16500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 4-18 +<6106> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-79 +x_0=18500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 5-33 +<6107> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-131 +x_0=33500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 5-35 +<6108> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-111 +x_0=35500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 5-37 +<6109> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-91 +x_0=37500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 5-39 +<6110> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-71 +x_0=39500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 6-18 +<6111> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-132 +x_0=18500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 6-20 +<6112> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-113 +x_0=20500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 6-22 +<6113> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-94 +x_0=22500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / EPSG Arctic zone 6-24 +<6114> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-75 +x_0=24500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 1-27 +<6115> +proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=30 +x_0=27500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 1-29 +<6116> +proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=90 +x_0=29500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 1-31 +<6117> +proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=150 +x_0=31500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 1-21 +<6118> +proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-150 +x_0=21500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 2-28 +<6119> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=133 +x_0=28500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 2-10 +<6120> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=166 +x_0=10500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 2-12 +<6121> +proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-154 +x_0=12500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 3-21 +<6122> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=176 +x_0=21500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 3-23 +<6123> +proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-153 +x_0=23500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / EPSG Arctic zone 4-12 +<6124> +proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-155 +x_0=12500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs <> +# ETRS89 / EPSG Arctic zone 5-47 +<6125> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-5 +x_0=47500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Grand Cayman National Grid 1959 +<6128> +proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=ft +no_defs <> +# Sister Islands National Grid 1961 +<6129> +proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=ft +no_defs <> +# Cayman Islands National Grid 2011 (deprecated) +<6141> +proj=lcc +lat_1=19.33333333333333 +lat_2=19.7 +lat_0=19.33333333333333 +lon_0=80.56666666666666 +x_0=899160 +y_0=579120 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> +# NAD27 / Michigan North (deprecated) +# Unable to translate coordinate system EPSG:6200 into PROJ.4 format. +# +# NAD27 / Michigan Central +# Unable to translate coordinate system EPSG:6201 into PROJ.4 format. +# +# NAD27 / Michigan South +# Unable to translate coordinate system EPSG:6202 into PROJ.4 format. +# +# Macedonia State Coordinate System +<6204> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 23N +<6210> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 24N +<6211> +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MAGNA-SIRGAS / Arauca urban grid +# Unable to translate coordinate system EPSG:6244 into PROJ.4 format. +# +# MAGNA-SIRGAS / Armenia urban grid +# Unable to translate coordinate system EPSG:6245 into PROJ.4 format. +# +# MAGNA-SIRGAS / Barranquilla urban grid +# Unable to translate coordinate system EPSG:6246 into PROJ.4 format. +# +# MAGNA-SIRGAS / Bogota urban grid +# Unable to translate coordinate system EPSG:6247 into PROJ.4 format. +# +# MAGNA-SIRGAS / Bucaramanga urban grid +# Unable to translate coordinate system EPSG:6248 into PROJ.4 format. +# +# MAGNA-SIRGAS / Cali urban grid +# Unable to translate coordinate system EPSG:6249 into PROJ.4 format. +# +# MAGNA-SIRGAS / Cartagena urban grid +# Unable to translate coordinate system EPSG:6250 into PROJ.4 format. +# +# MAGNA-SIRGAS / Cucuta urban grid +# Unable to translate coordinate system EPSG:6251 into PROJ.4 format. +# +# MAGNA-SIRGAS / Florencia urban grid +# Unable to translate coordinate system EPSG:6252 into PROJ.4 format. +# +# MAGNA-SIRGAS / Ibague urban grid +# Unable to translate coordinate system EPSG:6253 into PROJ.4 format. +# +# MAGNA-SIRGAS / Inirida urban grid +# Unable to translate coordinate system EPSG:6254 into PROJ.4 format. +# +# MAGNA-SIRGAS / Leticia urban grid +# Unable to translate coordinate system EPSG:6255 into PROJ.4 format. +# +# MAGNA-SIRGAS / Manizales urban grid +# Unable to translate coordinate system EPSG:6256 into PROJ.4 format. +# +# MAGNA-SIRGAS / Medellin urban grid +# Unable to translate coordinate system EPSG:6257 into PROJ.4 format. +# +# MAGNA-SIRGAS / Mitu urban grid +# Unable to translate coordinate system EPSG:6258 into PROJ.4 format. +# +# MAGNA-SIRGAS / Mocoa urban grid +# Unable to translate coordinate system EPSG:6259 into PROJ.4 format. +# +# MAGNA-SIRGAS / Monteria urban grid +# Unable to translate coordinate system EPSG:6260 into PROJ.4 format. +# +# MAGNA-SIRGAS / Neiva urban grid +# Unable to translate coordinate system EPSG:6261 into PROJ.4 format. +# +# MAGNA-SIRGAS / Pasto urban grid +# Unable to translate coordinate system EPSG:6262 into PROJ.4 format. +# +# MAGNA-SIRGAS / Pereira urban grid +# Unable to translate coordinate system EPSG:6263 into PROJ.4 format. +# +# MAGNA-SIRGAS / Popayan urban grid +# Unable to translate coordinate system EPSG:6264 into PROJ.4 format. +# +# MAGNA-SIRGAS / Puerto Carreno urban grid +# Unable to translate coordinate system EPSG:6265 into PROJ.4 format. +# +# MAGNA-SIRGAS / Quibdo urban grid +# Unable to translate coordinate system EPSG:6266 into PROJ.4 format. +# +# MAGNA-SIRGAS / Riohacha urban grid +# Unable to translate coordinate system EPSG:6267 into PROJ.4 format. +# +# MAGNA-SIRGAS / San Andres urban grid +# Unable to translate coordinate system EPSG:6268 into PROJ.4 format. +# +# MAGNA-SIRGAS / San Jose del Guaviare urban grid +# Unable to translate coordinate system EPSG:6269 into PROJ.4 format. +# +# MAGNA-SIRGAS / Santa Marta urban grid +# Unable to translate coordinate system EPSG:6270 into PROJ.4 format. +# +# MAGNA-SIRGAS / Sucre urban grid +# Unable to translate coordinate system EPSG:6271 into PROJ.4 format. +# +# MAGNA-SIRGAS / Tunja urban grid +# Unable to translate coordinate system EPSG:6272 into PROJ.4 format. +# +# MAGNA-SIRGAS / Valledupar urban grid +# Unable to translate coordinate system EPSG:6273 into PROJ.4 format. +# +# MAGNA-SIRGAS / Villavicencio urban grid +# Unable to translate coordinate system EPSG:6274 into PROJ.4 format. +# +# MAGNA-SIRGAS / Yopal urban grid +# Unable to translate coordinate system EPSG:6275 into PROJ.4 format. +# +# NAD83(CORS96) / Puerto Rico and Virgin Is. +<6307> +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 <> +# CGRS93 / Cyprus Local Transverse Mercator +<6312> +proj=tmerc +lat_0=0 +lon_0=33 +k=0.99995 +x_0=200000 +y_0=-3500000 +ellps=WGS84 +towgs84=8.846,-4.394,-1.122,-0.00237,-0.146528,0.130428,0.783926 +units=m +no_defs <> +# Macedonia State Coordinate System zone 7 +<6316> +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 <> +# NAD83(2011) / UTM zone 59N +<6328> +proj=utm +zone=59 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 60N +<6329> +proj=utm +zone=60 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 1N +<6330> +proj=utm +zone=1 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 2N +<6331> +proj=utm +zone=2 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 3N +<6332> +proj=utm +zone=3 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 4N +<6333> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 5N +<6334> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 6N +<6335> +proj=utm +zone=6 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 7N +<6336> +proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 8N +<6337> +proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 9N +<6338> +proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 10N +<6339> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 11N +<6340> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 12N +<6341> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 13N +<6342> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 14N +<6343> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 15N +<6344> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 16N +<6345> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 17N +<6346> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 18N +<6347> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / UTM zone 19N +<6348> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Conus Albers +<6350> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / EPSG Arctic zone 5-29 +<6351> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-163 +x_0=29500000 +y_0=5500000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / EPSG Arctic zone 5-31 +<6352> +proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-147 +x_0=31500000 +y_0=5500000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / EPSG Arctic zone 6-14 +<6353> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-165 +x_0=14500000 +y_0=6500000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / EPSG Arctic zone 6-16 +<6354> +proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-147 +x_0=16500000 +y_0=6500000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alabama East +<6355> +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 <> +# NAD83(2011) / Alabama West +<6356> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# Mexico ITRF92 / LCC +<6362> +proj=lcc +lat_1=17.5 +lat_2=29.5 +lat_0=12 +lon_0=-102 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / UTM zone 11N +<6366> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / UTM zone 12N +<6367> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / UTM zone 13N +<6368> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / UTM zone 14N +<6369> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / UTM zone 15N +<6370> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / UTM zone 16N +<6371> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexico ITRF2008 / LCC +<6372> +proj=lcc +lat_1=17.5 +lat_2=29.5 +lat_0=12 +lon_0=-102 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 7 +<6381> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 8 +<6382> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 9 +<6383> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 10 +<6384> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 11 +<6385> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 12 +<6386> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# UCS-2000 / Ukraine TM zone 13 +<6387> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=300000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,0,0.35,0.736,0 +units=m +no_defs <> +# Cayman Islands National Grid 2011 +<6391> +proj=lcc +lat_1=19.33333333333333 +lat_2=19.7 +lat_0=19.33333333333333 +lon_0=-80.56666666666666 +x_0=899160 +y_0=579120 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> +# NAD83(2011) / Alaska Albers +<6393> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 1 +<6394> +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 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 2 +<6395> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 3 +<6396> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 4 +<6397> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 5 +<6398> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 6 +<6399> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 7 +<6400> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 8 +<6401> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 9 +<6402> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Alaska zone 10 +<6403> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Arizona Central +<6404> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Arizona Central (ft) +<6405> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Arizona East +<6406> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Arizona East (ft) +<6407> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Arizona West +<6408> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Arizona West (ft) +<6409> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Arkansas North +<6410> +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 <> +# NAD83(2011) / Arkansas North (ftUS) +<6411> +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 <> +# NAD83(2011) / Arkansas South +<6412> +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 <> +# NAD83(2011) / Arkansas South (ftUS) +<6413> +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 <> +# NAD83(2011) / California Albers +<6414> +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 <> +# NAD83(2011) / California zone 1 +<6415> +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 <> +# NAD83(2011) / California zone 1 (ftUS) +<6416> +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 <> +# NAD83(2011) / California zone 2 +<6417> +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 <> +# NAD83(2011) / California zone 2 (ftUS) +<6418> +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 <> +# NAD83(2011) / California zone 3 +<6419> +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 <> +# NAD83(2011) / California zone 3 (ftUS) +<6420> +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 <> +# NAD83(2011) / California zone 4 +<6421> +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 <> +# NAD83(2011) / California zone 4 (ftUS) +<6422> +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 <> +# NAD83(2011) / California zone 5 +<6423> +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 <> +# NAD83(2011) / California zone 5 (ftUS) +<6424> +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 <> +# NAD83(2011) / California zone 6 +<6425> +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 <> +# NAD83(2011) / California zone 6 (ftUS) +<6426> +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 <> +# NAD83(2011) / Colorado Central +<6427> +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 <> +# NAD83(2011) / Colorado Central (ftUS) +<6428> +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 <> +# NAD83(2011) / Colorado North +<6429> +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 <> +# NAD83(2011) / Colorado North (ftUS) +<6430> +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 <> +# NAD83(2011) / Colorado South +<6431> +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 <> +# NAD83(2011) / Colorado South (ftUS) +<6432> +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 <> +# NAD83(2011) / Connecticut +<6433> +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 <> +# NAD83(2011) / Connecticut (ftUS) +<6434> +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 <> +# NAD83(2011) / Delaware +<6435> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Delaware (ftUS) +<6436> +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 <> +# NAD83(2011) / Florida East +<6437> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Florida East (ftUS) +<6438> +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 <> +# NAD83(2011) / Florida GDL Albers +<6439> +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 <> +# NAD83(2011) / Florida North +<6440> +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 <> +# NAD83(2011) / Florida North (ftUS) +<6441> +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 <> +# NAD83(2011) / Florida West +<6442> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Florida West (ftUS) +<6443> +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 <> +# NAD83(2011) / Georgia East +<6444> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Georgia East (ftUS) +<6445> +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 <> +# NAD83(2011) / Georgia West +<6446> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Georgia West (ftUS) +<6447> +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 <> +# NAD83(2011) / Idaho Central +<6448> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Idaho Central (ftUS) +<6449> +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 <> +# NAD83(2011) / Idaho East +<6450> +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 <> +# NAD83(2011) / Idaho East (ftUS) +<6451> +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 <> +# NAD83(2011) / Idaho West +<6452> +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 <> +# NAD83(2011) / Idaho West (ftUS) +<6453> +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 <> +# NAD83(2011) / Illinois East +<6454> +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 <> +# NAD83(2011) / Illinois East (ftUS) +<6455> +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 <> +# NAD83(2011) / Illinois West +<6456> +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 <> +# NAD83(2011) / Illinois West (ftUS) +<6457> +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 <> +# NAD83(2011) / Indiana East +<6458> +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 <> +# NAD83(2011) / Indiana East (ftUS) +<6459> +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 <> +# NAD83(2011) / Indiana West +<6460> +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 <> +# NAD83(2011) / Indiana West (ftUS) +<6461> +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 <> +# NAD83(2011) / Iowa North +<6462> +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 <> +# NAD83(2011) / Iowa North (ftUS) +<6463> +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 <> +# NAD83(2011) / Iowa South +<6464> +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 <> +# NAD83(2011) / Iowa South (ftUS) +<6465> +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 <> +# NAD83(2011) / Kansas North +<6466> +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 <> +# NAD83(2011) / Kansas North (ftUS) +<6467> +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 <> +# NAD83(2011) / Kansas South +<6468> +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 <> +# NAD83(2011) / Kansas South (ftUS) +<6469> +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 <> +# NAD83(2011) / Kentucky North +<6470> +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 <> +# NAD83(2011) / Kentucky North (ftUS) +<6471> +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 <> +# NAD83(2011) / Kentucky Single Zone +<6472> +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 <> +# NAD83(2011) / Kentucky Single Zone (ftUS) +<6473> +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 <> +# NAD83(2011) / Kentucky South +<6474> +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 <> +# NAD83(2011) / Kentucky South (ftUS) +<6475> +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 <> +# NAD83(2011) / Louisiana North +<6476> +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 <> +# NAD83(2011) / Louisiana North (ftUS) +<6477> +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 <> +# NAD83(2011) / Louisiana South +<6478> +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 <> +# NAD83(2011) / Louisiana South (ftUS) +<6479> +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 <> +# NAD83(2011) / Maine CS2000 Central +<6480> +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 <> +# NAD83(2011) / Maine CS2000 East +<6481> +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 <> +# NAD83(2011) / Maine CS2000 West +<6482> +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 <> +# NAD83(2011) / Maine East +<6483> +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 <> +# NAD83(2011) / Maine East (ftUS) +<6484> +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 <> +# NAD83(2011) / Maine West +<6485> +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 <> +# NAD83(2011) / Maine West (ftUS) +<6486> +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 <> +# NAD83(2011) / Maryland +<6487> +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 <> +# NAD83(2011) / Maryland (ftUS) +<6488> +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 <> +# NAD83(2011) / Massachusetts Island +<6489> +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 <> +# NAD83(2011) / Massachusetts Island (ftUS) +<6490> +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 <> +# NAD83(2011) / Massachusetts Mainland +<6491> +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 <> +# NAD83(2011) / Massachusetts Mainland (ftUS) +<6492> +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 <> +# NAD83(2011) / Michigan Central +<6493> +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 <> +# NAD83(2011) / Michigan Central (ft) +<6494> +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 <> +# NAD83(2011) / Michigan North +<6495> +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 <> +# NAD83(2011) / Michigan North (ft) +<6496> +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 <> +# NAD83(2011) / Michigan Oblique Mercator +<6497> +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 +units=m +no_defs <> +# NAD83(2011) / Michigan South +<6498> +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 <> +# NAD83(2011) / Michigan South (ft) +<6499> +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 <> +# NAD83(2011) / Minnesota Central +<6500> +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 <> +# NAD83(2011) / Minnesota Central (ftUS) +<6501> +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 <> +# NAD83(2011) / Minnesota North +<6502> +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 <> +# NAD83(2011) / Minnesota North (ftUS) +<6503> +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 <> +# NAD83(2011) / Minnesota South +<6504> +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 <> +# NAD83(2011) / Minnesota South (ftUS) +<6505> +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 <> +# NAD83(2011) / Mississippi East +<6506> +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 <> +# NAD83(2011) / Mississippi East (ftUS) +<6507> +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 <> +# NAD83(2011) / Mississippi TM +<6508> +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 <> +# NAD83(2011) / Mississippi West +<6509> +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 <> +# NAD83(2011) / Mississippi West (ftUS) +<6510> +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 <> +# NAD83(2011) / Missouri Central +<6511> +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 <> +# NAD83(2011) / Missouri East +<6512> +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 <> +# NAD83(2011) / Missouri West +<6513> +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 <> +# NAD83(2011) / Montana +<6514> +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 <> +# NAD83(2011) / Montana (ft) +<6515> +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 <> +# NAD83(2011) / Nebraska +<6516> +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 <> +# NAD83(2011) / Nebraska (ftUS) (deprecated) +<6517> +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(2011) / Nevada Central +<6518> +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 <> +# NAD83(2011) / Nevada Central (ftUS) +<6519> +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 <> +# NAD83(2011) / Nevada East +<6520> +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 <> +# NAD83(2011) / Nevada East (ftUS) +<6521> +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 <> +# NAD83(2011) / Nevada West +<6522> +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 <> +# NAD83(2011) / Nevada West (ftUS) +<6523> +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 <> +# NAD83(2011) / New Hampshire +<6524> +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 <> +# NAD83(2011) / New Hampshire (ftUS) +<6525> +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 <> +# NAD83(2011) / New Jersey +<6526> +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 <> +# NAD83(2011) / New Jersey (ftUS) +<6527> +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 <> +# NAD83(2011) / New Mexico Central +<6528> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / New Mexico Central (ftUS) +<6529> +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 <> +# NAD83(2011) / New Mexico East +<6530> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / New Mexico East (ftUS) +<6531> +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 <> +# NAD83(2011) / New Mexico West +<6532> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / New Mexico West (ftUS) +<6533> +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 <> +# NAD83(2011) / New York Central +<6534> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / New York Central (ftUS) +<6535> +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 <> +# NAD83(2011) / New York East +<6536> +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 <> +# NAD83(2011) / New York East (ftUS) +<6537> +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 <> +# NAD83(2011) / New York Long Island +<6538> +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 <> +# NAD83(2011) / New York Long Island (ftUS) +<6539> +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 <> +# NAD83(2011) / New York West +<6540> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / New York West (ftUS) +<6541> +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 <> +# NAD83(2011) / North Carolina +<6542> +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 <> +# NAD83(2011) / North Carolina (ftUS) +<6543> +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 <> +# NAD83(2011) / North Dakota North +<6544> +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 <> +# NAD83(2011) / North Dakota North (ft) +<6545> +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 <> +# NAD83(2011) / North Dakota South +<6546> +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 <> +# NAD83(2011) / North Dakota South (ft) +<6547> +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 <> +# NAD83(2011) / Ohio North +<6548> +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 <> +# NAD83(2011) / Ohio North (ftUS) +<6549> +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 <> +# NAD83(2011) / Ohio South +<6550> +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 <> +# NAD83(2011) / Ohio South (ftUS) +<6551> +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 <> +# NAD83(2011) / Oklahoma North +<6552> +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 <> +# NAD83(2011) / Oklahoma North (ftUS) +<6553> +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 <> +# NAD83(2011) / Oklahoma South +<6554> +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 <> +# NAD83(2011) / Oklahoma South (ftUS) +<6555> +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 <> +# NAD83(2011) / Oregon LCC (m) +<6556> +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 <> +# NAD83(2011) / Oregon GIC Lambert (ft) +<6557> +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 <> +# NAD83(2011) / Oregon North +<6558> +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 <> +# NAD83(2011) / Oregon North (ft) +<6559> +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 <> +# NAD83(2011) / Oregon South +<6560> +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 <> +# NAD83(2011) / Oregon South (ft) +<6561> +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 <> +# NAD83(2011) / Pennsylvania North +<6562> +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 <> +# NAD83(2011) / Pennsylvania North (ftUS) +<6563> +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 <> +# NAD83(2011) / Pennsylvania South +<6564> +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 <> +# NAD83(2011) / Pennsylvania South (ftUS) +<6565> +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 <> +# NAD83(2011) / Puerto Rico and Virgin Is. +<6566> +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 <> +# NAD83(2011) / Rhode Island +<6567> +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 <> +# NAD83(2011) / Rhode Island (ftUS) +<6568> +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 <> +# NAD83(2011) / South Carolina +<6569> +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 <> +# NAD83(2011) / South Carolina (ft) +<6570> +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 <> +# NAD83(2011) / South Dakota North +<6571> +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 <> +# NAD83(2011) / South Dakota North (ftUS) +<6572> +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 <> +# NAD83(2011) / South Dakota South +<6573> +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 <> +# NAD83(2011) / South Dakota South (ftUS) +<6574> +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 <> +# NAD83(2011) / Tennessee +<6575> +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 <> +# NAD83(2011) / Tennessee (ftUS) +<6576> +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 <> +# NAD83(2011) / Texas Central +<6577> +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 <> +# NAD83(2011) / Texas Central (ftUS) +<6578> +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 <> +# NAD83(2011) / Texas Centric Albers Equal Area +<6579> +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 <> +# NAD83(2011) / Texas Centric Lambert Conformal +<6580> +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 <> +# NAD83(2011) / Texas North +<6581> +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 <> +# NAD83(2011) / Texas North (ftUS) +<6582> +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 <> +# NAD83(2011) / Texas North Central +<6583> +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 <> +# NAD83(2011) / Texas North Central (ftUS) +<6584> +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 <> +# NAD83(2011) / Texas South +<6585> +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 <> +# NAD83(2011) / Texas South (ftUS) +<6586> +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 <> +# NAD83(2011) / Texas South Central +<6587> +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 <> +# NAD83(2011) / Texas South Central (ftUS) +<6588> +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 <> +# NAD83(2011) / Vermont +<6589> +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 <> +# NAD83(2011) / Vermont (ftUS) +<6590> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / Virginia Lambert +<6591> +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 <> +# NAD83(2011) / Virginia North +<6592> +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 <> +# NAD83(2011) / Virginia North (ftUS) +<6593> +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 <> +# NAD83(2011) / Virginia South +<6594> +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 <> +# NAD83(2011) / Virginia South (ftUS) +<6595> +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 <> +# NAD83(2011) / Washington North +<6596> +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 <> +# NAD83(2011) / Washington North (ftUS) +<6597> +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 <> +# NAD83(2011) / Washington South +<6598> +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 <> +# NAD83(2011) / Washington South (ftUS) +<6599> +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 <> +# NAD83(2011) / West Virginia North +<6600> +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 <> +# NAD83(2011) / West Virginia North (ftUS) +<6601> +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 <> +# NAD83(2011) / West Virginia South +<6602> +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 <> +# NAD83(2011) / West Virginia South (ftUS) +<6603> +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 <> +# NAD83(2011) / Wisconsin Central (deprecated) +<6604> +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(2011) / Wisconsin Central (ftUS) +<6605> +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 <> +# NAD83(2011) / Wisconsin North +<6606> +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 <> +# NAD83(2011) / Wisconsin North (ftUS) +<6607> +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 <> +# NAD83(2011) / Wisconsin South +<6608> +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 <> +# NAD83(2011) / Wisconsin South (ftUS) +<6609> +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 <> +# NAD83(2011) / Wisconsin Transverse Mercator +<6610> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Wyoming East +<6611> +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 <> +# NAD83(2011) / Wyoming East (ftUS) +<6612> +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 <> +# NAD83(2011) / Wyoming East Central +<6613> +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 <> +# NAD83(2011) / Wyoming East Central (ftUS) +<6614> +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 <> +# NAD83(2011) / Wyoming West +<6615> +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 <> +# NAD83(2011) / Wyoming West (ftUS) +<6616> +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 <> +# NAD83(2011) / Wyoming West Central +<6617> +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 <> +# NAD83(2011) / Wyoming West Central (ftUS) +<6618> +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 <> +# NAD83(2011) / Utah Central +<6619> +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 <> +# NAD83(2011) / Utah North +<6620> +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 <> +# NAD83(2011) / Utah South +<6621> +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 <> +# NAD83(CSRS) / Quebec Lambert +<6622> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83 / Quebec Albers +<6623> +proj=aea +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(CSRS) / Quebec Albers +<6624> +proj=aea +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(2011) / Utah Central (ftUS) +<6625> +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 <> +# NAD83(2011) / Utah North (ftUS) +<6626> +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 <> +# NAD83(2011) / Utah South (ftUS) +<6627> +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 <> +# NAD83(PA11) / Hawaii zone 1 +<6628> +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 <> +# NAD83(PA11) / Hawaii zone 2 +<6629> +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 <> +# NAD83(PA11) / Hawaii zone 3 +<6630> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(PA11) / Hawaii zone 4 +<6631> +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 <> +# NAD83(PA11) / Hawaii zone 5 +<6632> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(PA11) / Hawaii zone 3 (ftUS) +<6633> +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 <> +# NAD83(PA11) / UTM zone 4N +<6634> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <> +# NAD83(PA11) / UTM zone 5N +<6635> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <> +# NAD83(PA11) / UTM zone 2S +<6636> +proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs <> +# NAD83(MA11) / Guam Map Grid +<6637> +proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <> +# Karbala 1979 / Iraq National Grid +<6646> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS I +<6669> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS II +<6670> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS III +<6671> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS IV +<6672> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS V +<6673> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS VI +<6674> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS VII +<6675> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS VIII +<6676> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS IX +<6677> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS X +<6678> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XI +<6679> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XII +<6680> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XIII +<6681> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XIV +<6682> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XV +<6683> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XVI +<6684> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XVII +<6685> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XVIII +<6686> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / Japan Plane Rectangular CS XIX +<6687> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / UTM zone 51N +<6688> +proj=utm +zone=51 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / UTM zone 52N +<6689> +proj=utm +zone=52 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / UTM zone 53N +<6690> +proj=utm +zone=53 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / UTM zone 54N +<6691> +proj=utm +zone=54 +ellps=GRS80 +units=m +no_defs <> +# JGD2011 / UTM zone 55N +<6692> +proj=utm +zone=55 +ellps=GRS80 +units=m +no_defs <> +# WGS 84 / TM 60 SW +<6703> +proj=tmerc +lat_0=0 +lon_0=-60 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs <> +# RDN2008 / TM32 +<6707> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RDN2008 / TM33 +<6708> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RDN2008 / TM34 +<6709> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# WGS 84 / CIG92 +<6720> +proj=tmerc +lat_0=0 +lon_0=105.625 +k=1.000024 +x_0=50000 +y_0=1300000 +datum=WGS84 +units=m +no_defs <> +# GDA94 / CIG94 +<6721> +proj=tmerc +lat_0=0 +lon_0=105.625 +k=1.00002514 +x_0=50000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# WGS 84 / CKIG92 +<6722> +proj=tmerc +lat_0=0 +lon_0=96.875 +k=1 +x_0=50000 +y_0=1400000 +datum=WGS84 +units=m +no_defs <> +# GDA94 / CKIG94 +<6723> +proj=tmerc +lat_0=0 +lon_0=96.875 +k=0.99999387 +x_0=50000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 41 (deprecated) +<6732> +proj=utm +zone=41 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 42 (deprecated) +<6733> +proj=utm +zone=42 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 43 (deprecated) +<6734> +proj=utm +zone=43 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 44 (deprecated) +<6735> +proj=utm +zone=44 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 46 +<6736> +proj=utm +zone=46 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 47 +<6737> +proj=utm +zone=47 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 59 +<6738> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Baker zone (m) +<6784> +proj=tmerc +lat_0=44.5 +lon_0=-117.8333333333333 +k=1.00016 +x_0=40000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Baker zone (ft) +<6785> +proj=tmerc +lat_0=44.5 +lon_0=-117.8333333333333 +k=1.00016 +x_0=39999.99999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Baker zone (m) +<6786> +proj=tmerc +lat_0=44.5 +lon_0=-117.8333333333333 +k=1.00016 +x_0=40000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Baker zone (ft) +<6787> +proj=tmerc +lat_0=44.5 +lon_0=-117.8333333333333 +k=1.00016 +x_0=39999.99999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Bend-Klamath Falls zone (m) +<6788> +proj=tmerc +lat_0=41.75 +lon_0=-121.75 +k=1.0002 +x_0=80000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Bend-Klamath Falls zone (ft) +<6789> +proj=tmerc +lat_0=41.75 +lon_0=-121.75 +k=1.0002 +x_0=79999.99999968 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Bend-Klamath Falls zone (m) +<6790> +proj=tmerc +lat_0=41.75 +lon_0=-121.75 +k=1.0002 +x_0=80000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Bend-Klamath Falls zone (ft) +<6791> +proj=tmerc +lat_0=41.75 +lon_0=-121.75 +k=1.0002 +x_0=79999.99999968 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Bend-Redmond-Prineville zone (m) +<6792> +proj=lcc +lat_1=44.66666666666666 +lat_0=44.66666666666666 +lon_0=-121.25 +k_0=1.00012 +x_0=80000 +y_0=130000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Bend-Redmond-Prineville zone (ft) +<6793> +proj=lcc +lat_1=44.66666666666666 +lat_0=44.66666666666666 +lon_0=-121.25 +k_0=1.00012 +x_0=79999.99999968 +y_0=130000.00001472 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Bend-Redmond-Prineville zone (m) +<6794> +proj=lcc +lat_1=44.66666666666666 +lat_0=44.66666666666666 +lon_0=-121.25 +k_0=1.00012 +x_0=80000 +y_0=130000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Bend-Redmond-Prineville zone (ft) +<6795> +proj=lcc +lat_1=44.66666666666666 +lat_0=44.66666666666666 +lon_0=-121.25 +k_0=1.00012 +x_0=79999.99999968 +y_0=130000.00001472 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Bend-Burns zone (m) +<6796> +proj=lcc +lat_1=43.66666666666666 +lat_0=43.66666666666666 +lon_0=-119.75 +k_0=1.0002 +x_0=120000 +y_0=60000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Bend-Burns zone (ft) +<6797> +proj=lcc +lat_1=43.66666666666666 +lat_0=43.66666666666666 +lon_0=-119.75 +k_0=1.0002 +x_0=119999.99999952 +y_0=59999.99999976 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Bend-Burns zone (m) +<6798> +proj=lcc +lat_1=43.66666666666666 +lat_0=43.66666666666666 +lon_0=-119.75 +k_0=1.0002 +x_0=120000 +y_0=60000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Bend-Burns zone (ft) +<6799> +proj=lcc +lat_1=43.66666666666666 +lat_0=43.66666666666666 +lon_0=-119.75 +k_0=1.0002 +x_0=119999.99999952 +y_0=59999.99999976 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Canyonville-Grants Pass zone (m) +<6800> +proj=tmerc +lat_0=42.5 +lon_0=-123.3333333333333 +k=1.00007 +x_0=40000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Canyonville-Grants Pass zone (ft) +<6801> +proj=tmerc +lat_0=42.5 +lon_0=-123.3333333333333 +k=1.00007 +x_0=39999.99999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Canyonville-Grants Pass zone (m) +<6802> +proj=tmerc +lat_0=42.5 +lon_0=-123.3333333333333 +k=1.00007 +x_0=40000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Canyonville-Grants Pass zone (ft) +<6803> +proj=tmerc +lat_0=42.5 +lon_0=-123.3333333333333 +k=1.00007 +x_0=39999.99999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Columbia River East zone (m) +<6804> +proj=lcc +lat_1=45.66666666666666 +lat_0=45.66666666666666 +lon_0=-120.5 +k_0=1.000008 +x_0=150000 +y_0=30000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Columbia River East zone (ft) +<6805> +proj=lcc +lat_1=45.66666666666666 +lat_0=45.66666666666666 +lon_0=-120.5 +k_0=1.000008 +x_0=150000.00001464 +y_0=30000.00001512 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Columbia River East zone (m) +<6806> +proj=lcc +lat_1=45.66666666666666 +lat_0=45.66666666666666 +lon_0=-120.5 +k_0=1.000008 +x_0=150000 +y_0=30000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Columbia River East zone (ft) +<6807> +proj=lcc +lat_1=45.66666666666666 +lat_0=45.66666666666666 +lon_0=-120.5 +k_0=1.000008 +x_0=150000.00001464 +y_0=30000.00001512 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Columbia River West zone (m) +<6808> +proj=omerc +lat_0=45.91666666666666 +lonc=-123 +alpha=295 +k=1 +x_0=7000000 +y_0=-3000000 +no_uoff +gamma=295 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Columbia River West zone (ft) +<6809> +proj=omerc +lat_0=45.91666666666666 +lonc=-123 +alpha=295 +k=1 +x_0=7000000.00000248 +y_0=-2999999.999988 +no_uoff +gamma=295 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Columbia River West zone (m) +<6810> +proj=omerc +lat_0=45.91666666666666 +lonc=-123 +alpha=295 +k=1 +x_0=7000000 +y_0=-3000000 +no_uoff +gamma=295 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Columbia River West zone (ft) +<6811> +proj=omerc +lat_0=45.91666666666666 +lonc=-123 +alpha=295 +k=1 +x_0=7000000.00000248 +y_0=-2999999.999988 +no_uoff +gamma=295 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Cottage Grove-Canyonville zone (m) +<6812> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-123.3333333333333 +k=1.000023 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Cottage Grove-Canyonville zone (ft) +<6813> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-123.3333333333333 +k=1.000023 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Cottage Grove-Canyonville zone (m) +<6814> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-123.3333333333333 +k=1.000023 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Cottage Grove-Canyonville zone (ft) +<6815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-123.3333333333333 +k=1.000023 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Dufur-Madras zone (m) +<6816> +proj=tmerc +lat_0=44.5 +lon_0=-121 +k=1.00011 +x_0=80000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Dufur-Madras zone (ft) +<6817> +proj=tmerc +lat_0=44.5 +lon_0=-121 +k=1.00011 +x_0=79999.99999968 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Dufur-Madras zone (m) +<6818> +proj=tmerc +lat_0=44.5 +lon_0=-121 +k=1.00011 +x_0=80000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Dufur-Madras zone (ft) +<6819> +proj=tmerc +lat_0=44.5 +lon_0=-121 +k=1.00011 +x_0=79999.99999968 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Eugene zone (m) +<6820> +proj=tmerc +lat_0=43.75 +lon_0=-123.1666666666667 +k=1.000015 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Eugene zone (ft) +<6821> +proj=tmerc +lat_0=43.75 +lon_0=-123.1666666666667 +k=1.000015 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Eugene zone (m) +<6822> +proj=tmerc +lat_0=43.75 +lon_0=-123.1666666666667 +k=1.000015 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Eugene zone (ft) +<6823> +proj=tmerc +lat_0=43.75 +lon_0=-123.1666666666667 +k=1.000015 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Grants Pass-Ashland zone (m) +<6824> +proj=tmerc +lat_0=41.75 +lon_0=-123.3333333333333 +k=1.000043 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Grants Pass-Ashland zone (ft) +<6825> +proj=tmerc +lat_0=41.75 +lon_0=-123.3333333333333 +k=1.000043 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Grants Pass-Ashland zone (m) +<6826> +proj=tmerc +lat_0=41.75 +lon_0=-123.3333333333333 +k=1.000043 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Grants Pass-Ashland zone (ft) +<6827> +proj=tmerc +lat_0=41.75 +lon_0=-123.3333333333333 +k=1.000043 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Gresham-Warm Springs zone (m) +<6828> +proj=tmerc +lat_0=45 +lon_0=-122.3333333333333 +k=1.00005 +x_0=10000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Gresham-Warm Springs zone (ft) +<6829> +proj=tmerc +lat_0=45 +lon_0=-122.3333333333333 +k=1.00005 +x_0=10000.0000152 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Gresham-Warm Springs zone (m) +<6830> +proj=tmerc +lat_0=45 +lon_0=-122.3333333333333 +k=1.00005 +x_0=10000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Gresham-Warm Springs zone (ft) +<6831> +proj=tmerc +lat_0=45 +lon_0=-122.3333333333333 +k=1.00005 +x_0=10000.0000152 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon La Grande zone (m) +<6832> +proj=tmerc +lat_0=45 +lon_0=-118 +k=1.00013 +x_0=40000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon La Grande zone (ft) +<6833> +proj=tmerc +lat_0=45 +lon_0=-118 +k=1.00013 +x_0=39999.99999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon La Grande zone (m) +<6834> +proj=tmerc +lat_0=45 +lon_0=-118 +k=1.00013 +x_0=40000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon La Grande zone (ft) +<6835> +proj=tmerc +lat_0=45 +lon_0=-118 +k=1.00013 +x_0=39999.99999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Ontario zone (m) +<6836> +proj=tmerc +lat_0=43.25 +lon_0=-117 +k=1.0001 +x_0=80000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Ontario zone (ft) +<6837> +proj=tmerc +lat_0=43.25 +lon_0=-117 +k=1.0001 +x_0=79999.99999968 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Ontario zone (m) +<6838> +proj=tmerc +lat_0=43.25 +lon_0=-117 +k=1.0001 +x_0=80000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Ontario zone (ft) +<6839> +proj=tmerc +lat_0=43.25 +lon_0=-117 +k=1.0001 +x_0=79999.99999968 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Coast zone (m) +<6840> +proj=omerc +lat_0=44.75 +lonc=-124.05 +alpha=5 +k=1 +x_0=-300000 +y_0=-4600000 +no_uoff +gamma=5 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Coast zone (ft) +<6841> +proj=omerc +lat_0=44.75 +lonc=-124.05 +alpha=5 +k=1 +x_0=-299999.9999988 +y_0=-4600000.00001208 +no_uoff +gamma=5 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Coast zone (m) +<6842> +proj=omerc +lat_0=44.75 +lonc=-124.05 +alpha=5 +k=1 +x_0=-300000 +y_0=-4600000 +no_uoff +gamma=5 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Coast zone (ft) +<6843> +proj=omerc +lat_0=44.75 +lonc=-124.05 +alpha=5 +k=1 +x_0=-299999.9999988 +y_0=-4600000.00001208 +no_uoff +gamma=5 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Pendleton zone (m) +<6844> +proj=tmerc +lat_0=45.25 +lon_0=-119.1666666666667 +k=1.000045 +x_0=60000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Pendleton zone (ft) +<6845> +proj=tmerc +lat_0=45.25 +lon_0=-119.1666666666667 +k=1.000045 +x_0=59999.99999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Pendleton zone (m) +<6846> +proj=tmerc +lat_0=45.25 +lon_0=-119.1666666666667 +k=1.000045 +x_0=60000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Pendleton zone (ft) +<6847> +proj=tmerc +lat_0=45.25 +lon_0=-119.1666666666667 +k=1.000045 +x_0=59999.99999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Pendleton-La Grande zone (m) +<6848> +proj=tmerc +lat_0=45.08333333333334 +lon_0=-118.3333333333333 +k=1.000175 +x_0=30000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Pendleton-La Grande zone (ft) +<6849> +proj=tmerc +lat_0=45.08333333333334 +lon_0=-118.3333333333333 +k=1.000175 +x_0=30000.00001512 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Pendleton-La Grande zone (m) +<6850> +proj=tmerc +lat_0=45.08333333333334 +lon_0=-118.3333333333333 +k=1.000175 +x_0=30000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Pendleton-La Grande zone (ft) +<6851> +proj=tmerc +lat_0=45.08333333333334 +lon_0=-118.3333333333333 +k=1.000175 +x_0=30000.00001512 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Portland zone (m) +<6852> +proj=lcc +lat_1=45.5 +lat_0=45.5 +lon_0=-122.75 +k_0=1.000002 +x_0=100000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Portland zone (ft) +<6853> +proj=lcc +lat_1=45.5 +lat_0=45.5 +lon_0=-122.75 +k_0=1.000002 +x_0=99999.99999960001 +y_0=50000.00001504 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Portland zone (m) +<6854> +proj=lcc +lat_1=45.5 +lat_0=45.5 +lon_0=-122.75 +k_0=1.000002 +x_0=100000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Portland zone (ft) +<6855> +proj=lcc +lat_1=45.5 +lat_0=45.5 +lon_0=-122.75 +k_0=1.000002 +x_0=99999.99999960001 +y_0=50000.00001504 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Salem zone (m) +<6856> +proj=tmerc +lat_0=44.33333333333334 +lon_0=-123.0833333333333 +k=1.00001 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Salem zone (ft) +<6857> +proj=tmerc +lat_0=44.33333333333334 +lon_0=-123.0833333333333 +k=1.00001 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Salem zone (m) +<6858> +proj=tmerc +lat_0=44.33333333333334 +lon_0=-123.0833333333333 +k=1.00001 +x_0=50000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Salem zone (ft) +<6859> +proj=tmerc +lat_0=44.33333333333334 +lon_0=-123.0833333333333 +k=1.00001 +x_0=50000.00001504 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon Santiam Pass zone (m) +<6860> +proj=tmerc +lat_0=44.08333333333334 +lon_0=-122.5 +k=1.000155 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) / Oregon Santiam Pass zone (ft) +<6861> +proj=tmerc +lat_0=44.08333333333334 +lon_0=-122.5 +k=1.000155 +x_0=0 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / Oregon Santiam Pass zone (m) +<6862> +proj=tmerc +lat_0=44.08333333333334 +lon_0=-122.5 +k=1.000155 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Oregon Santiam Pass (ft) +<6863> +proj=tmerc +lat_0=44.08333333333334 +lon_0=-122.5 +k=1.000155 +x_0=0 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(CORS96) / Oregon LCC (m) +<6867> +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 <> +# NAD83(CORS96) / Oregon GIC Lambert (ft) +<6868> +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 <> +# ETRS89 / Albania TM 2010 +<6870> +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 <> +# RDN2008 / Italy zone +<6875> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9985000000000001 +x_0=7000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RDN2008 / Zone 12 +<6876> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=3000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(2011) / Wisconsin Central +<6879> +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 <> +# NAD83(2011) / Nebraska (ftUS) +<6880> +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 <> +# NAD83(CORS96) / Oregon North +<6884> +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 <> +# NAD83(CORS96) / Oregon North (ft) +<6885> +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 <> +# NAD83(CORS96) / Oregon South +<6886> +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 <> +# NAD83(CORS96) / Oregon South (ft) +<6887> +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 <> +# South East Island 1943 / UTM zone 40N +<6915> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-43.685,-179.785,-267.721,0,0,0,0 +units=m +no_defs <> +# NAD83 / Kansas LCC +<6922> +proj=lcc +lat_1=39.5 +lat_2=37.5 +lat_0=36 +lon_0=-98.25 +x_0=400000 +y_0=0 +datum=NAD83 +units=m +no_defs <> +# NAD83 / Kansas LCC (ftUS) +<6923> +proj=lcc +lat_1=39.5 +lat_2=37.5 +lat_0=36 +lon_0=-98.25 +x_0=399999.99998984 +y_0=0 +datum=NAD83 +units=us-ft +no_defs <> +# NAD83(2011) / Kansas LCC +<6924> +proj=lcc +lat_1=39.5 +lat_2=37.5 +lat_0=36 +lon_0=-98.25 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / Kansas LCC (ftUS) +<6925> +proj=lcc +lat_1=39.5 +lat_2=37.5 +lat_0=36 +lon_0=-98.25 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +# WGS 84 / NSIDC EASE-Grid 2.0 North +<6931> +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 2.0 South +<6932> +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 2.0 Global +<6933> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# VN-2000 / TM-3 zone 481 +<6956> +proj=tmerc +lat_0=0 +lon_0=102 +k=0.9999 +x_0=0 +y_0=500000 +ellps=WGS84 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +units=m +no_defs <> +# VN-2000 / TM-3 zone 482 +<6957> +proj=tmerc +lat_0=0 +lon_0=105 +k=0.9999 +x_0=0 +y_0=500000 +ellps=WGS84 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +units=m +no_defs <> +# VN-2000 / TM-3 zone 491 +<6958> +proj=tmerc +lat_0=0 +lon_0=108 +k=0.9999 +x_0=0 +y_0=500000 +ellps=WGS84 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +units=m +no_defs <> +# VN-2000 / TM-3 Da Nang zone +<6959> +proj=tmerc +lat_0=0 +lon_0=107.75 +k=0.9999 +x_0=0 +y_0=500000 +ellps=WGS84 +towgs84=-191.90441429,-39.30318279,-111.45032835,0.00928836,-0.01975479,0.00427372,0.252906278 +units=m +no_defs <> +# ETRS89 / Albania LCC 2010 +<6962> +proj=lcc +lat_1=39 +lat_2=43 +lat_0=41 +lon_0=20 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD27 / Michigan North +# Unable to translate coordinate system EPSG:6966 into PROJ.4 format. +# +# Israeli Grid 05 +<6984> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs <> +# Israeli Grid 05/12 +<6991> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / San Francisco CS13 (deprecated) +<6996> +proj=tmerc +lat_0=37.75 +lon_0=-122.45 +k=1.000007 +x_0=48000 +y_0=24000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / San Francisco CS13 (ftUS) (deprecated) +<6997> +proj=tmerc +lat_0=37.75 +lon_0=-122.45 +k=1.000007 +x_0=48000 +y_0=24000 +ellps=GRS80 +units=us-ft +no_defs <> +# Nahrwan 1934 / UTM zone 37N +<7005> +proj=utm +zone=37 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs <> +# Nahrwan 1934 / UTM zone 38N +<7006> +proj=utm +zone=38 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs <> +# Nahrwan 1934 / UTM zone 39N +<7007> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs <> +# NAD83(2011) / IaRCS zone 1 +<7057> +proj=lcc +lat_1=43.2 +lat_0=43.2 +lon_0=-95.25 +k_0=1.000052 +x_0=3505207.010414021 +y_0=2926085.852171705 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 2 +<7058> +proj=lcc +lat_1=43.16666666666666 +lat_0=43.16666666666666 +lon_0=-92.75 +k_0=1.000043 +x_0=3810007.62001524 +y_0=2987045.974091948 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 3 +<7059> +proj=tmerc +lat_0=40.25 +lon_0=-91.2 +k=1.000035 +x_0=4114808.229616459 +y_0=2529845.05969012 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 4 +<7060> +proj=lcc +lat_1=42.53333333333333 +lat_0=42.53333333333333 +lon_0=-94.83333333333333 +k_0=1.000045 +x_0=4419608.839217679 +y_0=2621285.242570485 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 5 +<7061> +proj=lcc +lat_1=42.65 +lat_0=42.65 +lon_0=-92.25 +k_0=1.000032 +x_0=4724409.448818898 +y_0=2712725.425450851 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 6 +<7062> +proj=tmerc +lat_0=40.25 +lon_0=-95.73333333333333 +k=1.000039 +x_0=5029210.058420117 +y_0=2011684.023368047 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 7 +<7063> +proj=tmerc +lat_0=40.25 +lon_0=-94.63333333333334 +k=1.000045 +x_0=5334010.668021336 +y_0=2072644.145288291 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 8 +<7064> +proj=tmerc +lat_0=40.25 +lon_0=-93.71666666666667 +k=1.000033 +x_0=5638811.277622555 +y_0=2133604.267208535 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 9 +<7065> +proj=tmerc +lat_0=40.25 +lon_0=-92.81666666666666 +k=1.000027 +x_0=5943611.887223775 +y_0=2194564.389128779 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 10 +<7066> +proj=lcc +lat_1=41.83333333333334 +lat_0=41.83333333333334 +lon_0=-91.66666666666667 +k_0=1.00002 +x_0=6248412.496824994 +y_0=2438404.876809754 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 11 +<7067> +proj=tmerc +lat_0=40.25 +lon_0=-90.53333333333333 +k=1.000027 +x_0=6553213.106426213 +y_0=2316484.632969266 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 12 +<7068> +proj=lcc +lat_1=40.91666666666666 +lat_0=40.91666666666666 +lon_0=-93.75 +k_0=1.000037 +x_0=6858013.716027432 +y_0=1889763.779527559 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 13 +<7069> +proj=tmerc +lat_0=40.25 +lon_0=-91.91666666666667 +k=1.00002 +x_0=7162814.325628651 +y_0=1950723.901447803 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / IaRCS zone 14 +<7070> +proj=tmerc +lat_0=40.25 +lon_0=-91.25 +k=1.000018 +x_0=7467614.93522987 +y_0=1889763.779527559 +ellps=GRS80 +units=us-ft +no_defs <> +# RGTAAF07 / UTM zone 37S +<7074> +proj=utm +zone=37 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 38S +<7075> +proj=utm +zone=38 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 39S +<7076> +proj=utm +zone=39 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 40S +<7077> +proj=utm +zone=40 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 41S +<7078> +proj=utm +zone=41 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 42S +<7079> +proj=utm +zone=42 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 43S +<7080> +proj=utm +zone=43 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / UTM zone 44S +<7081> +proj=utm +zone=44 +south +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 / Terre Adelie Polar Stereographic +# Unable to translate coordinate system EPSG:7082 into PROJ.4 format. +# +# NAD83(2011) / RMTCRS St Mary (m) +<7109> +proj=tmerc +lat_0=48.5 +lon_0=-112.5 +k=1.00016 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Blackfeet (m) +<7110> +proj=tmerc +lat_0=48 +lon_0=-112.5 +k=1.00019 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Milk River (m) +<7111> +proj=lcc +lat_1=48.5 +lat_0=48.5 +lon_0=-111 +k_0=1.000145 +x_0=150000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Fort Belknap (m) +<7112> +proj=lcc +lat_1=48.5 +lat_0=48.5 +lon_0=-108.5 +k_0=1.00012 +x_0=200000 +y_0=150000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Fort Peck Assiniboine (m) +<7113> +proj=lcc +lat_1=48.33333333333334 +lat_0=48.33333333333334 +lon_0=-105.5 +k_0=1.00012 +x_0=200000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Fort Peck Sioux (m) +<7114> +proj=lcc +lat_1=48.33333333333334 +lat_0=48.33333333333334 +lon_0=-105.5 +k_0=1.00009 +x_0=100000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Crow (m) +<7115> +proj=tmerc +lat_0=44.75 +lon_0=-107.75 +k=1.000148 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Bobcat (m) +<7116> +proj=lcc +lat_1=46.25 +lat_0=46.25 +lon_0=-111.25 +k_0=1.000185 +x_0=100000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Billings (m) +<7117> +proj=lcc +lat_1=45.78333333333333 +lat_0=45.78333333333333 +lon_0=-108.4166666666667 +k_0=1.0001515 +x_0=200000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS Wind River (m) +<7118> +proj=tmerc +lat_0=42.66666666666666 +lon_0=-108.3333333333333 +k=1.00024 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / RMTCRS St Mary (ft) +<7119> +proj=tmerc +lat_0=48.5 +lon_0=-112.5 +k=1.00016 +x_0=150000.00001464 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Blackfeet (ft) +<7120> +proj=tmerc +lat_0=48 +lon_0=-112.5 +k=1.00019 +x_0=99999.99999960001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Milk River (ft) +<7121> +proj=lcc +lat_1=48.5 +lat_0=48.5 +lon_0=-111 +k_0=1.000145 +x_0=150000.00001464 +y_0=199999.9999992 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Fort Belknap (ft) +<7122> +proj=lcc +lat_1=48.5 +lat_0=48.5 +lon_0=-108.5 +k_0=1.00012 +x_0=199999.9999992 +y_0=150000.00001464 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Fort Peck Assiniboine (ft) +<7123> +proj=lcc +lat_1=48.33333333333334 +lat_0=48.33333333333334 +lon_0=-105.5 +k_0=1.00012 +x_0=199999.9999992 +y_0=99999.99999960001 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Fort Peck Sioux (ft) +<7124> +proj=lcc +lat_1=48.33333333333334 +lat_0=48.33333333333334 +lon_0=-105.5 +k_0=1.00009 +x_0=99999.99999960001 +y_0=49999.99971024 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Crow (ft) +<7125> +proj=tmerc +lat_0=44.75 +lon_0=-107.75 +k=1.000148 +x_0=199999.9999992 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Bobcat (ft) +<7126> +proj=lcc +lat_1=46.25 +lat_0=46.25 +lon_0=-111.25 +k_0=1.000185 +x_0=99999.99999960001 +y_0=99999.99999960001 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Billings (ft) +<7127> +proj=lcc +lat_1=45.78333333333333 +lat_0=45.78333333333333 +lon_0=-108.4166666666667 +k_0=1.0001515 +x_0=199999.9999992 +y_0=50000.00001504 +ellps=GRS80 +units=ft +no_defs <> +# NAD83(2011) / RMTCRS Wind River (ftUS) +<7128> +proj=tmerc +lat_0=42.66666666666666 +lon_0=-108.3333333333333 +k=1.00024 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / San Francisco CS13 +<7131> +proj=tmerc +lat_0=37.75 +lon_0=-122.45 +k=1.000007 +x_0=48000 +y_0=24000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / San Francisco CS13 (ftUS) +<7132> +proj=tmerc +lat_0=37.75 +lon_0=-122.45 +k=1.000007 +x_0=48000 +y_0=24000 +ellps=GRS80 +units=us-ft +no_defs <> +# Palestine 1923 / Palestine Grid modified +<7142> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.7224,94.7824,340.8944,-8.001,-4.42,-11.821,1 +units=m +no_defs <> +# NAD83(2011) / InGCS Adams (m) +<7257> +proj=tmerc +lat_0=40.55 +lon_0=-84.95 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Adams (ftUS) +<7258> +proj=tmerc +lat_0=40.55 +lon_0=-84.95 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Allen (m) +<7259> +proj=tmerc +lat_0=40.9 +lon_0=-85.05 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Allen (ftUS) +<7260> +proj=tmerc +lat_0=40.9 +lon_0=-85.05 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Bartholomew (m) +<7261> +proj=tmerc +lat_0=39 +lon_0=-85.84999999999999 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Bartholomew (ftUS) +<7262> +proj=tmerc +lat_0=39 +lon_0=-85.84999999999999 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Benton (m) +<7263> +proj=tmerc +lat_0=40.45 +lon_0=-87.3 +k=1.000029 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Benton (ftUS) +<7264> +proj=tmerc +lat_0=40.45 +lon_0=-87.3 +k=1.000029 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Blackford-Delaware (m) +<7265> +proj=tmerc +lat_0=40.05 +lon_0=-85.40000000000001 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Blackford-Delaware (ftUS) +<7266> +proj=tmerc +lat_0=40.05 +lon_0=-85.40000000000001 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Boone-Hendricks (m) +<7267> +proj=tmerc +lat_0=39.6 +lon_0=-86.5 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Boone-Hendricks (ftUS) +<7268> +proj=tmerc +lat_0=39.6 +lon_0=-86.5 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Brown (m) +<7269> +proj=tmerc +lat_0=39 +lon_0=-86.3 +k=1.00003 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Brown (ftUS) +<7270> +proj=tmerc +lat_0=39 +lon_0=-86.3 +k=1.00003 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Carroll (m) +<7271> +proj=tmerc +lat_0=40.4 +lon_0=-86.65000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Carroll (ftUS) +<7272> +proj=tmerc +lat_0=40.4 +lon_0=-86.65000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Cass (m) +<7273> +proj=tmerc +lat_0=40.55 +lon_0=-86.40000000000001 +k=1.000028 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Cass (ftUS) +<7274> +proj=tmerc +lat_0=40.55 +lon_0=-86.40000000000001 +k=1.000028 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Clark-Floyd-Scott (m) +<7275> +proj=tmerc +lat_0=38.15 +lon_0=-85.59999999999999 +k=1.000021 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Clark-Floyd-Scott (ftUS) +<7276> +proj=tmerc +lat_0=38.15 +lon_0=-85.59999999999999 +k=1.000021 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Clay (m) +<7277> +proj=tmerc +lat_0=39.15 +lon_0=-87.15000000000001 +k=1.000024 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Clay (ftUS) +<7278> +proj=tmerc +lat_0=39.15 +lon_0=-87.15000000000001 +k=1.000024 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Clinton (m) +<7279> +proj=tmerc +lat_0=40.15 +lon_0=-86.59999999999999 +k=1.000032 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Clinton (ftUS) +<7280> +proj=tmerc +lat_0=40.15 +lon_0=-86.59999999999999 +k=1.000032 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Crawford-Lawrence-Orange (m) +<7281> +proj=tmerc +lat_0=38.1 +lon_0=-86.5 +k=1.000025 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Crawford-Lawrence-Orange (ftUS) +<7282> +proj=tmerc +lat_0=38.1 +lon_0=-86.5 +k=1.000025 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Daviess-Greene (m) +<7283> +proj=tmerc +lat_0=38.45 +lon_0=-87.09999999999999 +k=1.000018 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Daviess-Greene (ftUS) +<7284> +proj=tmerc +lat_0=38.45 +lon_0=-87.09999999999999 +k=1.000018 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Dearborn-Ohio-Switzerland (m) +<7285> +proj=tmerc +lat_0=38.65 +lon_0=-84.90000000000001 +k=1.000029 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Dearborn-Ohio-Switzerland (ftUS) +<7286> +proj=tmerc +lat_0=38.65 +lon_0=-84.90000000000001 +k=1.000029 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Decatur-Rush (m) +<7287> +proj=tmerc +lat_0=39.1 +lon_0=-85.65000000000001 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Decatur-Rush (ftUS) +<7288> +proj=tmerc +lat_0=39.1 +lon_0=-85.65000000000001 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS DeKalb (m) +<7289> +proj=tmerc +lat_0=41.25 +lon_0=-84.95 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS DeKalb (ftUS) +<7290> +proj=tmerc +lat_0=41.25 +lon_0=-84.95 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Dubois-Martin (m) +<7291> +proj=tmerc +lat_0=38.2 +lon_0=-86.95 +k=1.00002 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Dubois-Martin (ftUS) +<7292> +proj=tmerc +lat_0=38.2 +lon_0=-86.95 +k=1.00002 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Elkhart-Kosciusko-Wabash (m) +<7293> +proj=tmerc +lat_0=40.65 +lon_0=-85.84999999999999 +k=1.000033 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Elkhart-Kosciusko-Wabash (ftUS) +<7294> +proj=tmerc +lat_0=40.65 +lon_0=-85.84999999999999 +k=1.000033 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Fayette-Franklin-Union (m) +<7295> +proj=tmerc +lat_0=39.25 +lon_0=-85.05 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Fayette-Franklin-Union (ftUS) +<7296> +proj=tmerc +lat_0=39.25 +lon_0=-85.05 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Fountain-Warren (m) +<7297> +proj=tmerc +lat_0=39.95 +lon_0=-87.3 +k=1.000025 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Fountain-Warren (ftUS) +<7298> +proj=tmerc +lat_0=39.95 +lon_0=-87.3 +k=1.000025 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Fulton-Marshall-St. Joseph (m) +<7299> +proj=tmerc +lat_0=40.9 +lon_0=-86.3 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Fulton-Marshall-St. Joseph (ftUS) +<7300> +proj=tmerc +lat_0=40.9 +lon_0=-86.3 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Gibson (m) +<7301> +proj=tmerc +lat_0=38.15 +lon_0=-87.65000000000001 +k=1.000013 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Gibson (ftUS) +<7302> +proj=tmerc +lat_0=38.15 +lon_0=-87.65000000000001 +k=1.000013 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Grant (m) +<7303> +proj=tmerc +lat_0=40.35 +lon_0=-85.7 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Grant (ftUS) +<7304> +proj=tmerc +lat_0=40.35 +lon_0=-85.7 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Hamilton-Tipton (m) +<7305> +proj=tmerc +lat_0=39.9 +lon_0=-86 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Hamilton-Tipton (ftUS) +<7306> +proj=tmerc +lat_0=39.9 +lon_0=-86 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Hancock-Madison (m) +<7307> +proj=tmerc +lat_0=39.65 +lon_0=-85.8 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Hancock-Madison (ftUS) +<7308> +proj=tmerc +lat_0=39.65 +lon_0=-85.8 +k=1.000036 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Harrison-Washington (m) +<7309> +proj=tmerc +lat_0=37.95 +lon_0=-86.15000000000001 +k=1.000027 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Harrison-Washington (ftUS) +<7310> +proj=tmerc +lat_0=37.95 +lon_0=-86.15000000000001 +k=1.000027 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Henry (m) +<7311> +proj=tmerc +lat_0=39.75 +lon_0=-85.45 +k=1.000043 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Henry (ftUS) +<7312> +proj=tmerc +lat_0=39.75 +lon_0=-85.45 +k=1.000043 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Howard-Miami (m) +<7313> +proj=tmerc +lat_0=40.35 +lon_0=-86.15000000000001 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Howard-Miami (ftUS) +<7314> +proj=tmerc +lat_0=40.35 +lon_0=-86.15000000000001 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Huntington-Whitley (m) +<7315> +proj=tmerc +lat_0=40.65 +lon_0=-85.5 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Huntington-Whitley (ftUS) +<7316> +proj=tmerc +lat_0=40.65 +lon_0=-85.5 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Jackson (m) +<7317> +proj=tmerc +lat_0=38.7 +lon_0=-85.95 +k=1.000022 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Jackson (ftUS) +<7318> +proj=tmerc +lat_0=38.7 +lon_0=-85.95 +k=1.000022 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Jasper-Porter (m) +<7319> +proj=tmerc +lat_0=40.7 +lon_0=-87.09999999999999 +k=1.000027 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Jasper-Porter (ftUS) +<7320> +proj=tmerc +lat_0=40.7 +lon_0=-87.09999999999999 +k=1.000027 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Jay (m) +<7321> +proj=tmerc +lat_0=40.3 +lon_0=-85 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Jay (ftUS) +<7322> +proj=tmerc +lat_0=40.3 +lon_0=-85 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Jefferson (m) +<7323> +proj=tmerc +lat_0=38.55 +lon_0=-85.34999999999999 +k=1.000028 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Jefferson (ftUS) +<7324> +proj=tmerc +lat_0=38.55 +lon_0=-85.34999999999999 +k=1.000028 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Jennings (m) +<7325> +proj=tmerc +lat_0=38.8 +lon_0=-85.8 +k=1.000025 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Jennings (ftUS) +<7326> +proj=tmerc +lat_0=38.8 +lon_0=-85.8 +k=1.000025 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Johnson-Marion (m) +<7327> +proj=tmerc +lat_0=39.3 +lon_0=-86.15000000000001 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Johnson-Marion (ftUS) +<7328> +proj=tmerc +lat_0=39.3 +lon_0=-86.15000000000001 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Knox (m) +<7329> +proj=tmerc +lat_0=38.4 +lon_0=-87.45 +k=1.000015 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Knox (ftUS) +<7330> +proj=tmerc +lat_0=38.4 +lon_0=-87.45 +k=1.000015 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS LaGrange-Noble (m) +<7331> +proj=tmerc +lat_0=41.25 +lon_0=-85.45 +k=1.000037 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS LaGrange-Noble (ftUS) +<7332> +proj=tmerc +lat_0=41.25 +lon_0=-85.45 +k=1.000037 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Lake-Newton (m) +<7333> +proj=tmerc +lat_0=40.7 +lon_0=-87.40000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Lake-Newton (ftUS) +<7334> +proj=tmerc +lat_0=40.7 +lon_0=-87.40000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS LaPorte-Pulaski-Starke (m) +<7335> +proj=tmerc +lat_0=40.9 +lon_0=-86.75 +k=1.000027 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS LaPorte-Pulaski-Starke (ftUS) +<7336> +proj=tmerc +lat_0=40.9 +lon_0=-86.75 +k=1.000027 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Monroe-Morgan (m) +<7337> +proj=tmerc +lat_0=38.95 +lon_0=-86.5 +k=1.000028 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Monroe-Morgan (ftUS) +<7338> +proj=tmerc +lat_0=38.95 +lon_0=-86.5 +k=1.000028 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Montgomery-Putnam (m) +<7339> +proj=tmerc +lat_0=39.45 +lon_0=-86.95 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Montgomery-Putnam (ftUS) +<7340> +proj=tmerc +lat_0=39.45 +lon_0=-86.95 +k=1.000031 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Owen (m) +<7341> +proj=tmerc +lat_0=39.15 +lon_0=-86.90000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Owen (ftUS) +<7342> +proj=tmerc +lat_0=39.15 +lon_0=-86.90000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Parke-Vermillion (m) +<7343> +proj=tmerc +lat_0=39.6 +lon_0=-87.34999999999999 +k=1.000022 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Parke-Vermillion (ftUS) +<7344> +proj=tmerc +lat_0=39.6 +lon_0=-87.34999999999999 +k=1.000022 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Perry (m) +<7345> +proj=tmerc +lat_0=37.8 +lon_0=-86.7 +k=1.00002 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Perry (ftUS) +<7346> +proj=tmerc +lat_0=37.8 +lon_0=-86.7 +k=1.00002 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Pike-Warrick (m) +<7347> +proj=tmerc +lat_0=37.85 +lon_0=-87.3 +k=1.000015 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Pike-Warrick (ftUS) +<7348> +proj=tmerc +lat_0=37.85 +lon_0=-87.3 +k=1.000015 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Posey (m) +<7349> +proj=tmerc +lat_0=37.75 +lon_0=-87.95 +k=1.000013 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Posey (ftUS) +<7350> +proj=tmerc +lat_0=37.75 +lon_0=-87.95 +k=1.000013 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Randolph-Wayne (m) +<7351> +proj=tmerc +lat_0=39.7 +lon_0=-85.05 +k=1.000044 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Randolph-Wayne (ftUS) +<7352> +proj=tmerc +lat_0=39.7 +lon_0=-85.05 +k=1.000044 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Ripley (m) +<7353> +proj=tmerc +lat_0=38.9 +lon_0=-85.3 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Ripley (ftUS) +<7354> +proj=tmerc +lat_0=38.9 +lon_0=-85.3 +k=1.000038 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Shelby (m) +<7355> +proj=tmerc +lat_0=39.3 +lon_0=-85.90000000000001 +k=1.00003 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Shelby (ftUS) +<7356> +proj=tmerc +lat_0=39.3 +lon_0=-85.90000000000001 +k=1.00003 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Spencer (m) +<7357> +proj=tmerc +lat_0=37.75 +lon_0=-87.05 +k=1.000014 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Spencer (ftUS) +<7358> +proj=tmerc +lat_0=37.75 +lon_0=-87.05 +k=1.000014 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Steuben (m) +<7359> +proj=tmerc +lat_0=41.5 +lon_0=-85 +k=1.000041 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Steuben (ftUS) +<7360> +proj=tmerc +lat_0=41.5 +lon_0=-85 +k=1.000041 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Sullivan (m) +<7361> +proj=tmerc +lat_0=38.9 +lon_0=-87.5 +k=1.000017 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Sullivan (ftUS) +<7362> +proj=tmerc +lat_0=38.9 +lon_0=-87.5 +k=1.000017 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Tippecanoe-White (m) +<7363> +proj=tmerc +lat_0=40.2 +lon_0=-86.90000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Tippecanoe-White (ftUS) +<7364> +proj=tmerc +lat_0=40.2 +lon_0=-86.90000000000001 +k=1.000026 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Vanderburgh (m) +<7365> +proj=tmerc +lat_0=37.8 +lon_0=-87.55 +k=1.000015 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Vanderburgh (ftUS) +<7366> +proj=tmerc +lat_0=37.8 +lon_0=-87.55 +k=1.000015 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Vigo (m) +<7367> +proj=tmerc +lat_0=39.25 +lon_0=-87.45 +k=1.00002 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Vigo (ftUS) +<7368> +proj=tmerc +lat_0=39.25 +lon_0=-87.45 +k=1.00002 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / InGCS Wells (m) +<7369> +proj=tmerc +lat_0=40.55 +lon_0=-85.25 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / InGCS Wells (ftUS) +<7370> +proj=tmerc +lat_0=40.55 +lon_0=-85.25 +k=1.000034 +x_0=240000 +y_0=36000 +ellps=GRS80 +units=us-ft +no_defs <> +# ONGD14 / UTM zone 39N +<7374> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ONGD14 / UTM zone 40N +<7375> +proj=utm +zone=40 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ONGD14 / UTM zone 41N +<7376> +proj=utm +zone=41 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(2011) / WISCRS Adams and Juneau (m) +<7528> +proj=tmerc +lat_0=43.36666666666667 +lon_0=-90 +k=1.0000365285 +x_0=147218.6942 +y_0=0.0037 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Ashland (m) +<7529> +proj=tmerc +lat_0=45.70611111111111 +lon_0=-90.62222222222222 +k=1.0000495683 +x_0=172821.9461 +y_0=0.0017 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Barron (m) +<7530> +proj=tmerc +lat_0=45.13333333333333 +lon_0=-91.84999999999999 +k=1.0000486665 +x_0=93150 +y_0=0.0029 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Bayfield (m) +<7531> +proj=lcc +lat_1=46.66964837722222 +lat_0=46.66964837722222 +lon_0=-91.15277777777779 +k_0=1.0000331195 +x_0=228600.4575 +y_0=148551.4837 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Brown (m) +<7532> +proj=tmerc +lat_0=43 +lon_0=-88 +k=1.00002 +x_0=31600 +y_0=4600 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Buffalo (m) +<7533> +proj=tmerc +lat_0=43.48138888888889 +lon_0=-91.79722222222222 +k=1.0000382778 +x_0=175260.3502 +y_0=0.0048 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Burnett (m) +<7534> +proj=lcc +lat_1=45.89871486583333 +lat_0=45.89871486583333 +lon_0=-92.45777777777778 +k_0=1.0000383841 +x_0=64008.1276 +y_0=59445.9043 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Calumet, Fond du Lac, Outagamie and Winnebago (m) +<7535> +proj=tmerc +lat_0=42.71944444444445 +lon_0=-88.5 +k=1.0000286569 +x_0=244754.8893 +y_0=0.0049 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Chippewa (m) +<7536> +proj=lcc +lat_1=44.97785689861112 +lat_0=44.97785689861112 +lon_0=-91.29444444444444 +k_0=1.0000391127 +x_0=60045.72 +y_0=44091.4346 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Clark (m) +<7537> +proj=tmerc +lat_0=43.6 +lon_0=-90.70833333333334 +k=1.0000463003 +x_0=199949.1989 +y_0=0.0086 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Columbia (m) +<7538> +proj=lcc +lat_1=43.46254664583333 +lat_0=43.46254664583333 +lon_0=-89.39444444444445 +k_0=1.00003498 +x_0=169164.3381 +y_0=111569.6134 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Crawford (m) +<7539> +proj=lcc +lat_1=43.200055605 +lat_0=43.200055605 +lon_0=-90.9388888888889 +k_0=1.0000349151 +x_0=113690.6274 +y_0=53703.1201 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Dane (m) +<7540> +proj=lcc +lat_1=43.0695160375 +lat_0=43.0695160375 +lon_0=-89.42222222222223 +k_0=1.0000384786 +x_0=247193.2944 +y_0=146591.9896 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Dodge and Jefferson (m) +<7541> +proj=tmerc +lat_0=41.47222222222222 +lon_0=-88.77500000000001 +k=1.0000346418 +x_0=263347.7263 +y_0=0.0076 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Door (m) +<7542> +proj=tmerc +lat_0=44.4 +lon_0=-87.27222222222223 +k=1.0000187521 +x_0=158801.1176 +y_0=0.0023 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Douglas (m) +<7543> +proj=tmerc +lat_0=45.88333333333333 +lon_0=-91.91666666666667 +k=1.0000385418 +x_0=59131.3183 +y_0=0.0041 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Dunn (m) +<7544> +proj=tmerc +lat_0=44.40833333333333 +lon_0=-91.89444444444445 +k=1.0000410324 +x_0=51816.104 +y_0=0.003 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Eau Claire (m) +<7545> +proj=lcc +lat_1=44.87228112638889 +lat_0=44.87228112638889 +lon_0=-91.28888888888889 +k_0=1.000035079 +x_0=120091.4402 +y_0=91687.92389999999 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Florence (m) +<7546> +proj=tmerc +lat_0=45.43888888888888 +lon_0=-88.14166666666668 +k=1.0000552095 +x_0=133502.6683 +y_0=0.0063 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Forest (m) +<7547> +proj=tmerc +lat_0=44.00555555555555 +lon_0=-88.63333333333334 +k=1.0000673004 +x_0=275844.5533 +y_0=0.0157 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Grant (m) +<7548> +proj=tmerc +lat_0=41.41111111111111 +lon_0=-90.8 +k=1.0000349452 +x_0=242316.4841 +y_0=0.01 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Green and Lafayette (m) +<7549> +proj=lcc +lat_1=42.63756227694444 +lat_0=42.63756227694444 +lon_0=-89.83888888888889 +k_0=1.0000390487 +x_0=170078.7403 +y_0=45830.2947 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Green Lake and Marquette (m) +<7550> +proj=lcc +lat_1=43.80700011777778 +lat_0=43.80700011777778 +lon_0=-89.24166666666667 +k_0=1.0000344057 +x_0=150876.3018 +y_0=79170.7795 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Iowa (m) +<7551> +proj=tmerc +lat_0=42.53888888888888 +lon_0=-90.16111111111111 +k=1.0000394961 +x_0=113081.0261 +y_0=0.0045 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Iron (m) +<7552> +proj=tmerc +lat_0=45.43333333333333 +lon_0=-90.25555555555556 +k=1.0000677153 +x_0=220980.4419 +y_0=0.008500000000000001 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Jackson (m) +<7553> +proj=tmerc +lat_0=44.25333512777778 +lon_0=-90.84429651944444 +k=1.0000353 +x_0=27000 +y_0=25000 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Kenosha, Milwaukee, Ozaukee and Racine (m) +<7554> +proj=tmerc +lat_0=42.21666666666667 +lon_0=-87.89444444444445 +k=1.0000260649 +x_0=185928.3728 +y_0=0.0009 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Kewaunee, Manitowoc and Sheboygan (m) +<7555> +proj=tmerc +lat_0=43.26666666666667 +lon_0=-87.55 +k=1.0000233704 +x_0=79857.7614 +y_0=0.0012 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS La Crosse (m) +<7556> +proj=tmerc +lat_0=43.45111111111111 +lon_0=-91.31666666666666 +k=1.0000319985 +x_0=130454.6598 +y_0=0.0033 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Langlade (m) +<7557> +proj=lcc +lat_1=45.15423710527778 +lat_0=45.15423710527778 +lon_0=-89.03333333333333 +k_0=1.0000627024 +x_0=198425.197 +y_0=105279.7829 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Lincoln (m) +<7558> +proj=tmerc +lat_0=44.84444444444445 +lon_0=-89.73333333333333 +k=1.0000599003 +x_0=116129.0323 +y_0=0.0058 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Marathon (m) +<7559> +proj=lcc +lat_1=44.90090442361111 +lat_0=44.90090442361111 +lon_0=-89.77 +k_0=1.000053289 +x_0=74676.1493 +y_0=55049.2669 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Marinette (m) +<7560> +proj=tmerc +lat_0=44.69166666666666 +lon_0=-87.71111111111111 +k=1.0000234982 +x_0=238658.8794 +y_0=0.0032 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Menominee (m) +<7561> +proj=tmerc +lat_0=44.71666666666667 +lon_0=-88.41666666666667 +k=1.0000362499 +x_0=105461.0121 +y_0=0.0029 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Monroe (m) +<7562> +proj=lcc +lat_1=44.00007392861111 +lat_0=44.00007392861111 +lon_0=-90.64166666666668 +k_0=1.0000434122 +x_0=204521.209 +y_0=121923.9861 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Oconto (m) +<7563> +proj=tmerc +lat_0=44.39722222222222 +lon_0=-87.90833333333335 +k=1.0000236869 +x_0=182880.3676 +y_0=0.0033 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Oneida (m) +<7564> +proj=lcc +lat_1=45.70422377027778 +lat_0=45.70422377027778 +lon_0=-89.54444444444444 +k_0=1.0000686968 +x_0=70104.1401 +y_0=57588.0346 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Pepin and Pierce (m) +<7565> +proj=lcc +lat_1=44.63614887194444 +lat_0=44.63614887194444 +lon_0=-92.22777777777777 +k_0=1.0000362977 +x_0=167640.3354 +y_0=86033.0876 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Polk (m) +<7566> +proj=tmerc +lat_0=44.66111111111111 +lon_0=-92.63333333333334 +k=1.0000433849 +x_0=141732.2823 +y_0=0.0059 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Portage (m) +<7567> +proj=lcc +lat_1=44.41682397527777 +lat_0=44.41682397527777 +lon_0=-89.5 +k_0=1.000039936 +x_0=56388.1128 +y_0=50022.1874 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Price (m) +<7568> +proj=tmerc +lat_0=44.55555555555555 +lon_0=-90.48888888888889 +k=1.0000649554 +x_0=227990.8546 +y_0=0.0109 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Richland (m) +<7569> +proj=lcc +lat_1=43.3223129275 +lat_0=43.3223129275 +lon_0=-90.43055555555556 +k_0=1.0000375653 +x_0=202387.6048 +y_0=134255.4253 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Rock (m) +<7570> +proj=tmerc +lat_0=41.94444444444444 +lon_0=-89.07222222222222 +k=1.0000337311 +x_0=146304.2926 +y_0=0.0068 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Rusk (m) +<7571> +proj=tmerc +lat_0=43.91944444444444 +lon_0=-91.06666666666666 +k=1.0000495976 +x_0=250546.1013 +y_0=0.0234 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Sauk (m) +<7572> +proj=tmerc +lat_0=42.81944444444445 +lon_0=-89.90000000000001 +k=1.0000373868 +x_0=185623.5716 +y_0=0.0051 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Sawyer (m) +<7573> +proj=lcc +lat_1=45.90009913138888 +lat_0=45.90009913138888 +lon_0=-91.11666666666666 +k_0=1.0000573461 +x_0=216713.2336 +y_0=120734.1631 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Shawano (m) +<7574> +proj=tmerc +lat_0=44.03611111111111 +lon_0=-88.60555555555555 +k=1.000032144 +x_0=262433.3253 +y_0=0.009599999999999999 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS St. Croix (m) +<7575> +proj=tmerc +lat_0=44.03611111111111 +lon_0=-92.63333333333334 +k=1.0000381803 +x_0=165506.7302 +y_0=0.0103 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Taylor (m) +<7576> +proj=lcc +lat_1=45.17782208583333 +lat_0=45.17782208583333 +lon_0=-90.48333333333333 +k_0=1.0000597566 +x_0=187147.5744 +y_0=107746.7522 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Trempealeau (m) +<7577> +proj=tmerc +lat_0=43.16111111111111 +lon_0=-91.36666666666666 +k=1.0000361538 +x_0=256946.9138 +y_0=0.0041 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Vernon (m) +<7578> +proj=lcc +lat_1=43.57503293972223 +lat_0=43.57503293972223 +lon_0=-90.78333333333333 +k_0=1.0000408158 +x_0=222504.4451 +y_0=47532.0602 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Vilas (m) +<7579> +proj=lcc +lat_1=46.07784409055556 +lat_0=46.07784409055556 +lon_0=-89.48888888888889 +k_0=1.0000730142 +x_0=134417.0689 +y_0=50337.1092 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Walworth (m) +<7580> +proj=lcc +lat_1=42.66946209694444 +lat_0=42.66946209694444 +lon_0=-88.54166666666667 +k_0=1.0000367192 +x_0=232562.8651 +y_0=111088.2224 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Washburn (m) +<7581> +proj=lcc +lat_1=45.96121983333334 +lat_0=45.96121983333334 +lon_0=-91.78333333333333 +k_0=1.0000475376 +x_0=234086.8682 +y_0=188358.6058 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Washington (m) +<7582> +proj=tmerc +lat_0=42.91805555555555 +lon_0=-88.06388888888888 +k=1.00003738 +x_0=120091.4415 +y_0=0.003 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Waukesha (m) +<7583> +proj=tmerc +lat_0=42.56944444444445 +lon_0=-88.22499999999999 +k=1.0000346179 +x_0=208788.418 +y_0=0.0034 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Waupaca (m) +<7584> +proj=tmerc +lat_0=43.42027777777778 +lon_0=-88.81666666666666 +k=1.0000333645 +x_0=185013.9709 +y_0=0.007 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Waushara (m) +<7585> +proj=lcc +lat_1=44.11394404583334 +lat_0=44.11394404583334 +lon_0=-89.24166666666667 +k_0=1.0000392096 +x_0=120091.4402 +y_0=45069.7587 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Wood (m) +<7586> +proj=lcc +lat_1=44.36259546944444 +lat_0=44.36259546944444 +lon_0=-90 +k_0=1.0000421209 +x_0=208483.6173 +y_0=134589.754 +ellps=GRS80 +units=m +no_defs <> +# NAD83(2011) / WISCRS Adams and Juneau (ftUS) +<7587> +proj=tmerc +lat_0=43.36666666666667 +lon_0=-90 +k=1.0000365285 +x_0=147218.6941325883 +y_0=0.00365760731521463 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Ashland (ftUS) +<7588> +proj=tmerc +lat_0=45.70611111111111 +lon_0=-90.62222222222222 +k=1.0000495683 +x_0=172821.945948692 +y_0=0.001828803657607315 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Barron (ftUS) +<7589> +proj=tmerc +lat_0=45.13333333333333 +lon_0=-91.84999999999999 +k=1.0000486665 +x_0=93150 +y_0=0.003048006096012192 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Bayfield (ftUS) +<7590> +proj=lcc +lat_1=46.66964837722222 +lat_0=46.66964837722222 +lon_0=-91.15277777777779 +k_0=1.0000331195 +x_0=228600.4575057151 +y_0=148551.4835661671 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Brown (ftUS) +<7591> +proj=tmerc +lat_0=43 +lon_0=-88 +k=1.00002 +x_0=31599.99989839979 +y_0=4599.999898399797 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Buffalo (ftUS) +<7592> +proj=tmerc +lat_0=43.48138888888889 +lon_0=-91.79722222222222 +k=1.0000382778 +x_0=175260.3502159004 +y_0=0.004876809753619507 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Burnett (ftUS) +<7593> +proj=lcc +lat_1=45.89871486583333 +lat_0=45.89871486583333 +lon_0=-92.45777777777778 +k_0=1.0000383841 +x_0=64008.12771145543 +y_0=59445.90419100838 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Calumet, Fond du Lac, Outagamie and Winnebago (ftUS) +<7594> +proj=tmerc +lat_0=42.71944444444445 +lon_0=-88.5 +k=1.0000286569 +x_0=244754.8892049784 +y_0=0.004876809753619507 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Chippewa (ftUS) +<7595> +proj=lcc +lat_1=44.97785689861112 +lat_0=44.97785689861112 +lon_0=-91.29444444444444 +k_0=1.0000391127 +x_0=60045.72009144018 +y_0=44091.43449326898 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Clark (ftUS) +<7596> +proj=tmerc +lat_0=43.6 +lon_0=-90.70833333333334 +k=1.0000463003 +x_0=199949.198983998 +y_0=0.008534417068834137 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Columbia (ftUS) +<7597> +proj=lcc +lat_1=43.46254664583333 +lat_0=43.46254664583333 +lon_0=-89.39444444444445 +k_0=1.00003498 +x_0=169164.338023876 +y_0=111569.613512827 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Crawford (ftUS) +<7598> +proj=lcc +lat_1=43.200055605 +lat_0=43.200055605 +lon_0=-90.9388888888889 +k_0=1.0000349151 +x_0=113690.6273812548 +y_0=53703.12024384048 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Dane (ftUS) +<7599> +proj=lcc +lat_1=43.0695160375 +lat_0=43.0695160375 +lon_0=-89.42222222222223 +k_0=1.0000384786 +x_0=247193.2943865888 +y_0=146591.9896367793 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Dodge and Jefferson (ftUS) +<7600> +proj=tmerc +lat_0=41.47222222222222 +lon_0=-88.77500000000001 +k=1.0000346418 +x_0=263347.7263906528 +y_0=0.00762001524003048 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Door (ftUS) +<7601> +proj=tmerc +lat_0=44.4 +lon_0=-87.27222222222223 +k=1.0000187521 +x_0=158801.1176022352 +y_0=0.002438404876809754 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Douglas (ftUS) +<7602> +proj=tmerc +lat_0=45.88333333333333 +lon_0=-91.91666666666667 +k=1.0000385418 +x_0=59131.31826263652 +y_0=0.003962407924815849 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Dunn (ftUS) +<7603> +proj=tmerc +lat_0=44.40833333333333 +lon_0=-91.89444444444445 +k=1.0000410324 +x_0=51816.10393700787 +y_0=0.003048006096012192 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Eau Claire (ftUS) +<7604> +proj=lcc +lat_1=44.87228112638889 +lat_0=44.87228112638889 +lon_0=-91.28888888888889 +k_0=1.000035079 +x_0=120091.4401828804 +y_0=91687.92390144781 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Florence (ftUS) +<7605> +proj=tmerc +lat_0=45.43888888888888 +lon_0=-88.14166666666668 +k=1.0000552095 +x_0=133502.6682245364 +y_0=0.006400812801625603 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Forest (ftUS) +<7606> +proj=tmerc +lat_0=44.00555555555555 +lon_0=-88.63333333333334 +k=1.0000673004 +x_0=275844.5532131065 +y_0=0.0158496316992634 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Grant (ftUS) +<7607> +proj=tmerc +lat_0=41.41111111111111 +lon_0=-90.8 +k=1.0000349452 +x_0=242316.484023368 +y_0=0.01005842011684023 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Green and Lafayette (ftUS) +<7608> +proj=lcc +lat_1=42.63756227694444 +lat_0=42.63756227694444 +lon_0=-89.83888888888889 +k_0=1.0000390487 +x_0=170078.7401574803 +y_0=45830.29484378968 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Green Lake and Marquette (ftUS) +<7609> +proj=lcc +lat_1=43.80700011777778 +lat_0=43.80700011777778 +lon_0=-89.24166666666667 +k_0=1.0000344057 +x_0=150876.3017526035 +y_0=79170.77937515875 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Iowa (ftUS) +<7610> +proj=tmerc +lat_0=42.53888888888888 +lon_0=-90.16111111111111 +k=1.0000394961 +x_0=113081.0261620523 +y_0=0.004572009144018288 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Iron (ftUS) +<7611> +proj=tmerc +lat_0=45.43333333333333 +lon_0=-90.25555555555556 +k=1.0000677153 +x_0=220980.4419608839 +y_0=0.008534417068834137 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Jackson (ftUS) +<7612> +proj=tmerc +lat_0=44.25333512777778 +lon_0=-90.84429651944444 +k=1.0000353 +x_0=27000 +y_0=24999.99989839979 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Kenosha, Milwaukee, Ozaukee and Racine (ftUS) +<7613> +proj=tmerc +lat_0=42.21666666666667 +lon_0=-87.89444444444445 +k=1.0000260649 +x_0=185928.3727711455 +y_0=0.0009144018288036576 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Kewaunee, Manitowoc and Sheboygan (ftUS) +<7614> +proj=tmerc +lat_0=43.26666666666667 +lon_0=-87.55 +k=1.0000233704 +x_0=79857.76154432308 +y_0=0.001219202438404877 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS La Crosse (ftUS) +<7615> +proj=tmerc +lat_0=43.45111111111111 +lon_0=-91.31666666666666 +k=1.0000319985 +x_0=130454.6596901194 +y_0=0.003352806705613411 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Langlade (ftUS) +<7616> +proj=lcc +lat_1=45.15423710527778 +lat_0=45.15423710527778 +lon_0=-89.03333333333333 +k_0=1.0000627024 +x_0=198425.1968503937 +y_0=105279.7828803657 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Lincoln (ftUS) +<7617> +proj=tmerc +lat_0=44.84444444444445 +lon_0=-89.73333333333333 +k=1.0000599003 +x_0=116129.0322580645 +y_0=0.005791211582423164 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Marathon (ftUS) +<7618> +proj=lcc +lat_1=44.90090442361111 +lat_0=44.90090442361111 +lon_0=-89.77 +k_0=1.000053289 +x_0=74676.1493522987 +y_0=55049.26695453391 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Marinette (ftUS) +<7619> +proj=tmerc +lat_0=44.69166666666666 +lon_0=-87.71111111111111 +k=1.0000234982 +x_0=238658.8794513589 +y_0=0.003048006096012192 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Menominee (ftUS) +<7620> +proj=tmerc +lat_0=44.71666666666667 +lon_0=-88.41666666666667 +k=1.0000362499 +x_0=105461.0121412243 +y_0=0.003048006096012192 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Monroe (ftUS) +<7621> +proj=lcc +lat_1=44.00007392861111 +lat_0=44.00007392861111 +lon_0=-90.64166666666668 +k_0=1.0000434122 +x_0=204521.2090424181 +y_0=121923.9861823724 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Oconto (ftUS) +<7622> +proj=tmerc +lat_0=44.39722222222222 +lon_0=-87.90833333333335 +k=1.0000236869 +x_0=182880.3675895352 +y_0=0.003352806705613411 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Oneida (ftUS) +<7623> +proj=lcc +lat_1=45.70422377027778 +lat_0=45.70422377027778 +lon_0=-89.54444444444444 +k_0=1.0000686968 +x_0=70104.14020828041 +y_0=57588.03474726949 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Pepin and Pierce (ftUS) +<7624> +proj=lcc +lat_1=44.63614887194444 +lat_0=44.63614887194444 +lon_0=-92.22777777777777 +k_0=1.0000362977 +x_0=167640.3352806706 +y_0=86033.08773177546 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Polk (ftUS) +<7625> +proj=tmerc +lat_0=44.66111111111111 +lon_0=-92.63333333333334 +k=1.0000433849 +x_0=141732.2822453645 +y_0=0.005791211582423164 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Portage (ftUS) +<7626> +proj=lcc +lat_1=44.41682397527777 +lat_0=44.41682397527777 +lon_0=-89.5 +k_0=1.000039936 +x_0=56388.11277622555 +y_0=50022.1874523749 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Price (ftUS) +<7627> +proj=tmerc +lat_0=44.55555555555555 +lon_0=-90.48888888888889 +k=1.0000649554 +x_0=227990.8544577089 +y_0=0.01097282194564389 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Richland (ftUS) +<7628> +proj=lcc +lat_1=43.3223129275 +lat_0=43.3223129275 +lon_0=-90.43055555555556 +k_0=1.0000375653 +x_0=202387.6047752095 +y_0=134255.4254508509 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Rock (ftUS) +<7629> +proj=tmerc +lat_0=41.94444444444444 +lon_0=-89.07222222222222 +k=1.0000337311 +x_0=146304.2926085852 +y_0=0.006705613411226822 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Rusk (ftUS) +<7630> +proj=tmerc +lat_0=43.91944444444444 +lon_0=-91.06666666666666 +k=1.0000495976 +x_0=250546.1013970028 +y_0=0.02346964693929388 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Sauk (ftUS) +<7631> +proj=tmerc +lat_0=42.81944444444445 +lon_0=-89.90000000000001 +k=1.0000373868 +x_0=185623.5715519431 +y_0=0.005181610363220727 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Sawyer (ftUS) +<7632> +proj=lcc +lat_1=45.90009913138888 +lat_0=45.90009913138888 +lon_0=-91.11666666666666 +k_0=1.0000573461 +x_0=216713.2337312675 +y_0=120734.1631699263 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Shawano (ftUS) +<7633> +proj=tmerc +lat_0=44.03611111111111 +lon_0=-88.60555555555555 +k=1.000032144 +x_0=262433.3251714504 +y_0=0.009448818897637795 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS St. Croix (ftUS) +<7634> +proj=tmerc +lat_0=44.03611111111111 +lon_0=-92.63333333333334 +k=1.0000381803 +x_0=165506.7300990602 +y_0=0.01036322072644145 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Taylor (ftUS) +<7635> +proj=lcc +lat_1=45.17782208583333 +lat_0=45.17782208583333 +lon_0=-90.48333333333333 +k_0=1.0000597566 +x_0=187147.5742951486 +y_0=107746.7521463043 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Trempealeau (ftUS) +<7636> +proj=tmerc +lat_0=43.16111111111111 +lon_0=-91.36666666666666 +k=1.0000361538 +x_0=256946.9138938278 +y_0=0.003962407924815849 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Vernon (ftUS) +<7637> +proj=lcc +lat_1=43.57503293972223 +lat_0=43.57503293972223 +lon_0=-90.78333333333333 +k_0=1.0000408158 +x_0=222504.44500889 +y_0=47532.0603505207 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Vilas (ftUS) +<7638> +proj=lcc +lat_1=46.07784409055556 +lat_0=46.07784409055556 +lon_0=-89.48888888888889 +k_0=1.0000730142 +x_0=134417.0688341377 +y_0=50337.10927101854 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Walworth (ftUS) +<7639> +proj=lcc +lat_1=42.66946209694444 +lat_0=42.66946209694444 +lon_0=-88.54166666666667 +k_0=1.0000367192 +x_0=232562.8651257302 +y_0=111088.2224028448 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Washburn (ftUS) +<7640> +proj=lcc +lat_1=45.96121983333334 +lat_0=45.96121983333334 +lon_0=-91.78333333333333 +k_0=1.0000475376 +x_0=234086.8681737363 +y_0=188358.6059436119 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Washington (ftUS) +<7641> +proj=tmerc +lat_0=42.91805555555555 +lon_0=-88.06388888888888 +k=1.00003738 +x_0=120091.4414020828 +y_0=0.003048006096012192 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Waukesha (ftUS) +<7642> +proj=tmerc +lat_0=42.56944444444445 +lon_0=-88.22499999999999 +k=1.0000346179 +x_0=208788.4178816358 +y_0=0.003352806705613411 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Waupaca (ftUS) +<7643> +proj=tmerc +lat_0=43.42027777777778 +lon_0=-88.81666666666666 +k=1.0000333645 +x_0=185013.9709423419 +y_0=0.007010414020828041 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Waushara (ftUS) +<7644> +proj=lcc +lat_1=44.11394404583334 +lat_0=44.11394404583334 +lon_0=-89.24166666666667 +k_0=1.0000392096 +x_0=120091.4401828804 +y_0=45069.7588011176 +ellps=GRS80 +units=us-ft +no_defs <> +# NAD83(2011) / WISCRS Wood (ftUS) +<7645> +proj=lcc +lat_1=44.36259546944444 +lat_0=44.36259546944444 +lon_0=-90 +k_0=1.0000421209 +x_0=208483.6172720346 +y_0=134589.7539243078 +ellps=GRS80 +units=us-ft +no_defs <> +# Kyrg-06 / zone 1 +<7692> +proj=tmerc +lat_0=0 +lon_0=68.51666666666667 +k=1 +x_0=1300000 +y_0=14743.5 +ellps=GRS80 +units=m +no_defs <> +# Kyrg-06 / zone 2 +<7693> +proj=tmerc +lat_0=0 +lon_0=71.51666666666667 +k=1 +x_0=2300000 +y_0=14743.5 +ellps=GRS80 +units=m +no_defs <> +# Kyrg-06 / zone 3 +<7694> +proj=tmerc +lat_0=0 +lon_0=74.51666666666667 +k=1 +x_0=3300000 +y_0=14743.5 +ellps=GRS80 +units=m +no_defs <> +# Kyrg-06 / zone 4 +<7695> +proj=tmerc +lat_0=0 +lon_0=77.51666666666667 +k=1 +x_0=4300000 +y_0=14743.5 +ellps=GRS80 +units=m +no_defs <> +# Kyrg-06 / zone 5 +<7696> +proj=tmerc +lat_0=0 +lon_0=80.51666666666667 +k=1 +x_0=5300000 +y_0=14743.5 +ellps=GRS80 +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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs <> +# Adindan / UTM zone 36N +<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 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs <> +# Adindan / UTM zone 38N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> +# Ain el Abd / Bahrain Grid +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> +# Arc 1960 / UTM zone 35N +<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 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> +# Arc 1960 / UTM zone 37N +<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 +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 +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs <> +# Batavia / UTM zone 49S +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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.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.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 +<21818> +proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# Bogota 1975 / Colombia West zone (deprecated) +<21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# Bogota 1975 / Colombia Bogota zone (deprecated) +<21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# Bogota 1975 / Colombia East Central zone (deprecated) +<21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# Bogota 1975 / Colombia East (deprecated) +<21894> +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 <> +# Bogota 1975 / Colombia West zone +<21896> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# Bogota 1975 / Colombia Bogota zone +<21897> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# Bogota 1975 / Colombia East Central zone +<21898> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<22182> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 94 / Argentina 3 +<22183> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 94 / Argentina 4 +<22184> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 94 / Argentina 5 +<22185> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 94 / Argentina 6 +<22186> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +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 +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 +datum=carthage +units=m +no_defs <> +# Corrego Alegre 1970-72 / UTM zone 21S +<22521> +proj=utm +zone=21 +south +ellps=intl +towgs84=-205.57,168.77,-4.12,0,0,0,0 +units=m +no_defs <> +# Corrego Alegre 1970-72 / UTM zone 22S +<22522> +proj=utm +zone=22 +south +ellps=intl +towgs84=-205.57,168.77,-4.12,0,0,0,0 +units=m +no_defs <> +# Corrego Alegre 1970-72 / UTM zone 23S +<22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-205.57,168.77,-4.12,0,0,0,0 +units=m +no_defs <> +# Corrego Alegre 1970-72 / UTM zone 24S +<22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-205.57,168.77,-4.12,0,0,0,0 +units=m +no_defs <> +# Corrego Alegre 1970-72 / UTM zone 25S +<22525> +proj=utm +zone=25 +south +ellps=intl +towgs84=-205.57,168.77,-4.12,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 +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 +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 +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 +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 +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 +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 +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs <> +# ED50 / UTM zone 28N +<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 +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# ED50 / UTM zone 30N +<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 +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# ED50 / UTM zone 32N +<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 +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# ED50 / UTM zone 34N +<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 +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# ED50 / UTM zone 36N +<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 +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# ED50 / UTM zone 38N +<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 +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 +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# Fahud / UTM zone 39N +<23239> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-333.102,-11.02,230.69,0,0,0.554,0.219 +units=m +no_defs <> +# Fahud / UTM zone 40N +<23240> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-333.102,-11.02,230.69,0,0,0.554,0.219 +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 +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 +<23831> +proj=tmerc +lat_0=0 +lon_0=97.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.2 +<23832> +proj=tmerc +lat_0=0 +lon_0=100.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 48.1 +<23833> +proj=tmerc +lat_0=0 +lon_0=103.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 48.2 +<23834> +proj=tmerc +lat_0=0 +lon_0=106.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 49.1 +<23835> +proj=tmerc +lat_0=0 +lon_0=109.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 49.2 +<23836> +proj=tmerc +lat_0=0 +lon_0=112.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 50.1 +<23837> +proj=tmerc +lat_0=0 +lon_0=115.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 50.2 +<23838> +proj=tmerc +lat_0=0 +lon_0=118.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 51.1 +<23839> +proj=tmerc +lat_0=0 +lon_0=121.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 51.2 +<23840> +proj=tmerc +lat_0=0 +lon_0=124.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 52.1 +<23841> +proj=tmerc +lat_0=0 +lon_0=127.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 52.2 +<23842> +proj=tmerc +lat_0=0 +lon_0=130.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 53.1 +<23843> +proj=tmerc +lat_0=0 +lon_0=133.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 53.2 +<23844> +proj=tmerc +lat_0=0 +lon_0=136.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 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 +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 +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 +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 +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 +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 +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 +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 +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 +<23867> +proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 48N +<23868> +proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 49N +<23869> +proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 50N +<23870> +proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 51N +<23871> +proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 52N +<23872> +proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 47S +<23877> +proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 48S +<23878> +proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 49S +<23879> +proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 50S +<23880> +proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 51S +<23881> +proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 52S +<23882> +proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DGN95 / UTM zone 53S +<23883> +proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +<24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> +# Kalianpur 1975 / UTM zone 44N +<24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> +# Kalianpur 1975 / UTM zone 45N +<24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> +# Kalianpur 1975 / UTM zone 46N +<24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> +# Kalianpur 1975 / UTM zone 47N +<24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> +# Kalianpur 1880 / India zone 0 +<24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> +# Kalianpur 1880 / India zone I +<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 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 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 +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 +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 +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 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 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 <> +# Kertau 1968 / UTM zone 47N +<24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> +# 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 +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 +<24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> +# La Canoa / UTM zone 19N +<24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> +# 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 +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> +# PSAD56 / UTM zone 18N +<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 +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> +# PSAD56 / UTM zone 20N +<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 +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> +# PSAD56 / UTM zone 17S +<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 +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> +# PSAD56 / UTM zone 19S +<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 +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> +# PSAD56 / UTM zone 21S +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / UTM zone 29N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / UTM zone 31N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / UTM zone 33N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / UTM zone 35N +<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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / UTM zone 37N +<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 +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 +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 +<26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> +# Merchich / Sahara (deprecated) +<26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> +# Merchich / Sahara Nord +<26194> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> +# Merchich / Sahara Sud +<26195> +proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> +# 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 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs <> +# Minna / UTM zone 32N +<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 +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 +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 +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 +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 +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 +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 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs <> +# NAD27 / UTM zone 1N +<26701> +proj=utm +zone=1 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 2N +<26702> +proj=utm +zone=2 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 3N +<26703> +proj=utm +zone=3 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 4N +<26704> +proj=utm +zone=4 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 5N +<26705> +proj=utm +zone=5 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 6N +<26706> +proj=utm +zone=6 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 7N +<26707> +proj=utm +zone=7 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 8N +<26708> +proj=utm +zone=8 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 9N +<26709> +proj=utm +zone=9 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 10N +<26710> +proj=utm +zone=10 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 11N +<26711> +proj=utm +zone=11 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 12N +<26712> +proj=utm +zone=12 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 13N +<26713> +proj=utm +zone=13 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 14N +<26714> +proj=utm +zone=14 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 15N +<26715> +proj=utm +zone=15 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 16N +<26716> +proj=utm +zone=16 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 17N +<26717> +proj=utm +zone=17 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 18N +<26718> +proj=utm +zone=18 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 19N +<26719> +proj=utm +zone=19 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 20N +<26720> +proj=utm +zone=20 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 21N +<26721> +proj=utm +zone=21 +datum=NAD27 +units=m +no_defs <> +# NAD27 / UTM zone 22N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 (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 (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 (deprecated) +<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 <> +# NAD Michigan / Michigan Central (deprecated) +<26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> +# NAD Michigan / Michigan South (deprecated) +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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) +<26837> +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(NSRS2007) / Minnesota North (ftUS) (deprecated) +<26841> +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(NSRS2007) / Minnesota Central (ftUS) (deprecated) +<26842> +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(NSRS2007) / Minnesota South (ftUS) (deprecated) +<26843> +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(NSRS2007) / Nebraska (ftUS) (deprecated) +<26844> +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(NSRS2007) / West Virginia North (ftUS) (deprecated) +<26845> +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(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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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) +<26864> +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(NSRS2007) / Minnesota North (ftUS) +<26865> +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(NSRS2007) / Minnesota Central (ftUS) +<26866> +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(NSRS2007) / Minnesota South (ftUS) +<26867> +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(NSRS2007) / Nebraska (ftUS) +<26868> +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(NSRS2007) / West Virginia North (ftUS) +<26869> +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(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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83 / UTM zone 1N +<26901> +proj=utm +zone=1 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 2N +<26902> +proj=utm +zone=2 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 3N +<26903> +proj=utm +zone=3 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 4N +<26904> +proj=utm +zone=4 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 5N +<26905> +proj=utm +zone=5 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 6N +<26906> +proj=utm +zone=6 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 7N +<26907> +proj=utm +zone=7 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 8N +<26908> +proj=utm +zone=8 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 9N +<26909> +proj=utm +zone=9 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 10N +<26910> +proj=utm +zone=10 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 11N +<26911> +proj=utm +zone=11 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 12N +<26912> +proj=utm +zone=12 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 13N +<26913> +proj=utm +zone=13 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 14N +<26914> +proj=utm +zone=14 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 15N +<26915> +proj=utm +zone=15 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 16N +<26916> +proj=utm +zone=16 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 17N +<26917> +proj=utm +zone=17 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 18N +<26918> +proj=utm +zone=18 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 19N +<26919> +proj=utm +zone=19 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 20N +<26920> +proj=utm +zone=20 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 21N +<26921> +proj=utm +zone=21 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 22N +<26922> +proj=utm +zone=22 +datum=NAD83 +units=m +no_defs <> +# NAD83 / UTM zone 23N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +datum=NAD83 +units=m +no_defs <> +# Nahrwan 1967 / UTM zone 37N (deprecated) +<27037> +proj=utm +zone=37 +ellps=clrk80 +towgs84=-249,-156,381,0,0,0,0 +units=m +no_defs <> +# Nahrwan 1967 / UTM zone 38N (deprecated) +<27038> +proj=utm +zone=38 +ellps=clrk80 +towgs84=-249,-156,381,0,0,0,0 +units=m +no_defs <> +# Nahrwan 1967 / UTM zone 39N +<27039> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-249,-156,381,0,0,0,0 +units=m +no_defs <> +# Nahrwan 1967 / UTM zone 40N +<27040> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-249,-156,381,0,0,0,0 +units=m +no_defs <> +# Naparima 1972 / UTM zone 20N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +datum=nzgd49 +units=m +no_defs <> +# NZGD49 / UTM zone 58S +<27258> +proj=utm +zone=58 +south +datum=nzgd49 +units=m +no_defs <> +# NZGD49 / UTM zone 59S +<27259> +proj=utm +zone=59 +south +datum=nzgd49 +units=m +no_defs <> +# NZGD49 / UTM zone 60S +<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 +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 +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 +<27392> +proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +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 III +<27393> +proj=tmerc +lat_0=58 +lon_0=0 +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 IV +<27394> +proj=tmerc +lat_0=58 +lon_0=2.5 +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 V +<27395> +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +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 VI +<27396> +proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +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 VII +<27397> +proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +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 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 +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 +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 +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 +<27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +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 Sud France +<27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +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 Corse +<27564> +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 <> +# NTF (Paris) / Lambert zone I +<27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / Lambert zone II +<27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / Lambert zone III +<27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / Lambert zone IV +<27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / France I (deprecated) +<27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / France II (deprecated) +<27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / France III (deprecated) +<27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / France IV (deprecated) +<27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> +# NTF (Paris) / Nord France (deprecated) +<27591> +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) / Centre France (deprecated) +<27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +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) / Sud France (deprecated) +<27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +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) / 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 +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.7224,94.7824,340.8944,-8.001,-4.42,-11.821,1 +units=m +no_defs <> +# Palestine 1923 / Palestine Belt +<28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.7224,94.7824,340.8944,-8.001,-4.42,-11.821,1 +units=m +no_defs <> +# 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.7224,94.7824,340.8944,-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 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 48 +<28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 49 +<28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 50 +<28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 51 +<28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 52 +<28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 53 +<28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 54 +<28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 55 +<28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 56 +<28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDA94 / MGA zone 57 +<28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=565.4171,50.3319,465.5524,-0.398957,0.343988,-1.87740,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 +towgs84=565.4171,50.3319,465.5524,-0.398957,0.343988,-1.87740,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 +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 +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 18N (deprecated) +<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 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 20N (deprecated) +<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 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 22N (deprecated) +<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 +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 19N +<29169> +proj=utm +zone=19 +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 20N +<29170> +proj=utm +zone=20 +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 21N +<29171> +proj=utm +zone=21 +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 22N +<29172> +proj=utm +zone=22 +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 17S (deprecated) +<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 +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 +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 +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 +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 +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 +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 +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 +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 +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 18S +<29188> +proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 19S +<29189> +proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 20S +<29190> +proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 21S +<29191> +proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 22S +<29192> +proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 23S +<29193> +proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 24S +<29194> +proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 25S +<29195> +proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,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 +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs <> +# Schwarzeck / Lo22/11 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +<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 +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 +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 +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs <> +# Timbalai 1948 / UTM zone 50N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs <> +# Voirol 1875 / Nord Algerie (ancienne) +<30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> +# Voirol 1875 / Sud Algerie (ancienne) +<30492> +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 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> +# Voirol 1879 / Nord Algerie (ancienne) +<30493> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> +# 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 +towgs84=-209.3622,-87.8162,404.6198,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 +towgs84=-209.3622,-87.8162,404.6198,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 +towgs84=-209.3622,-87.8162,404.6198,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 +towgs84=-209.3622,-87.8162,404.6198,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.3622,-87.8162,404.6198,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.3622,-87.8162,404.6198,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 +<31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-30,190,89,0,0,0,0 +units=m +no_defs <> +# Zanderij / UTM zone 21N +<31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> +# Zanderij / TM 54 NW +<31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> +# Zanderij / Suriname Old TM +<31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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.8686,52.2978,-103.7239,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.8686,52.2978,-103.7239,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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<31966> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 13N +<31967> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 14N +<31968> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 15N +<31969> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 16N +<31970> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 17N +<31971> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 18N +<31972> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 19N +<31973> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 20N +<31974> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 21N +<31975> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 22N +<31976> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 17S +<31977> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 18S +<31978> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 19S +<31979> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 20S +<31980> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 21S +<31981> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 22S +<31982> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 23S +<31983> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 24S +<31984> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 25S +<31985> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 17N +<31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 18N +<31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 19N +<31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 20N +<31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 21N +<31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 22N +<31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 17S +<31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 18S +<31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 19S +<31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 20S +<31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 21S +<31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 22S +<31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 23S +<31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 1995 / UTM zone 24S +<31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +datum=NAD83 +units=m +no_defs <> +# WGS 72 / UTM zone 1N +<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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +<32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 3N +<32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 4N +<32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 5N +<32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 6N +<32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 7N +<32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 8N +<32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 9N +<32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 10N +<32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 11N +<32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 12N +<32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 13N +<32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 14N +<32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 15N +<32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 16N +<32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 17N +<32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 18N +<32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 19N +<32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 20N +<32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 21N +<32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 22N +<32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 23N +<32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 24N +<32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 25N +<32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 26N +<32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 27N +<32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 28N +<32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 29N +<32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 30N +<32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 31N +<32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 32N +<32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 33N +<32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 34N +<32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 35N +<32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 36N +<32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 37N +<32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 38N +<32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 39N +<32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 40N +<32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 41N +<32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 42N +<32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 43N +<32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 44N +<32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 45N +<32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 46N +<32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 47N +<32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 48N +<32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 49N +<32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 50N +<32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 51N +<32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 52N +<32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 53N +<32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 54N +<32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 55N +<32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 56N +<32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 57N +<32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 58N +<32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 59N +<32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 60N +<32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 1S +<32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 2S +<32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 3S +<32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 4S +<32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 5S +<32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 6S +<32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 7S +<32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 8S +<32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 9S +<32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 10S +<32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 11S +<32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 12S +<32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 13S +<32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 14S +<32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 15S +<32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 16S +<32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 17S +<32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 18S +<32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 19S +<32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 20S +<32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 21S +<32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 22S +<32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 23S +<32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 24S +<32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 25S +<32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 26S +<32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 27S +<32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 28S +<32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 29S +<32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 30S +<32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 31S +<32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 32S +<32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 33S +<32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 34S +<32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 35S +<32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 36S +<32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 37S +<32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 38S +<32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 39S +<32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 40S +<32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 41S +<32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 42S +<32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 43S +<32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 44S +<32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 45S +<32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 46S +<32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 47S +<32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 48S +<32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 49S +<32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 50S +<32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 51S +<32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 52S +<32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 53S +<32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 54S +<32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 55S +<32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 56S +<32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 57S +<32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 58S +<32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 59S +<32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 72BE / UTM zone 60S +<32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> +# WGS 84 / UTM grid system (northern hemisphere) +# Unable to translate coordinate system EPSG:32600 into PROJ.4 format. +# +# WGS 84 / UTM zone 1N +<32601> +proj=utm +zone=1 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 2N +<32602> +proj=utm +zone=2 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 3N +<32603> +proj=utm +zone=3 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 4N +<32604> +proj=utm +zone=4 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 5N +<32605> +proj=utm +zone=5 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 6N +<32606> +proj=utm +zone=6 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 7N +<32607> +proj=utm +zone=7 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 8N +<32608> +proj=utm +zone=8 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 9N +<32609> +proj=utm +zone=9 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 10N +<32610> +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 11N +<32611> +proj=utm +zone=11 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 12N +<32612> +proj=utm +zone=12 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 13N +<32613> +proj=utm +zone=13 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 14N +<32614> +proj=utm +zone=14 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 15N +<32615> +proj=utm +zone=15 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 16N +<32616> +proj=utm +zone=16 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 17N +<32617> +proj=utm +zone=17 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 18N +<32618> +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 19N +<32619> +proj=utm +zone=19 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 20N +<32620> +proj=utm +zone=20 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 21N +<32621> +proj=utm +zone=21 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 22N +<32622> +proj=utm +zone=22 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 23N +<32623> +proj=utm +zone=23 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 24N +<32624> +proj=utm +zone=24 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 25N +<32625> +proj=utm +zone=25 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 26N +<32626> +proj=utm +zone=26 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 27N +<32627> +proj=utm +zone=27 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 28N +<32628> +proj=utm +zone=28 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 29N +<32629> +proj=utm +zone=29 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 30N +<32630> +proj=utm +zone=30 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 31N +<32631> +proj=utm +zone=31 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 32N +<32632> +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 33N +<32633> +proj=utm +zone=33 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 34N +<32634> +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 35N +<32635> +proj=utm +zone=35 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 36N +<32636> +proj=utm +zone=36 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 37N +<32637> +proj=utm +zone=37 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 38N +<32638> +proj=utm +zone=38 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 39N +<32639> +proj=utm +zone=39 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 40N +<32640> +proj=utm +zone=40 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 41N +<32641> +proj=utm +zone=41 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 42N +<32642> +proj=utm +zone=42 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 43N +<32643> +proj=utm +zone=43 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 44N +<32644> +proj=utm +zone=44 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 45N +<32645> +proj=utm +zone=45 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 46N +<32646> +proj=utm +zone=46 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 47N +<32647> +proj=utm +zone=47 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 48N +<32648> +proj=utm +zone=48 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 49N +<32649> +proj=utm +zone=49 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 50N +<32650> +proj=utm +zone=50 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 51N +<32651> +proj=utm +zone=51 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 52N +<32652> +proj=utm +zone=52 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 53N +<32653> +proj=utm +zone=53 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 54N +<32654> +proj=utm +zone=54 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 55N +<32655> +proj=utm +zone=55 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 56N +<32656> +proj=utm +zone=56 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 57N +<32657> +proj=utm +zone=57 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 58N +<32658> +proj=utm +zone=58 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 59N +<32659> +proj=utm +zone=59 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 60N +<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 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / World Equidistant Cylindrical (deprecated) +<32663> +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 / BLM 14N (ftUS) +<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 +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 +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 +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 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 2S +<32702> +proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 3S +<32703> +proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 4S +<32704> +proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 5S +<32705> +proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 6S +<32706> +proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 7S +<32707> +proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 8S +<32708> +proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 9S +<32709> +proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 10S +<32710> +proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 11S +<32711> +proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 12S +<32712> +proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 13S +<32713> +proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 14S +<32714> +proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 15S +<32715> +proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 16S +<32716> +proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 17S +<32717> +proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 18S +<32718> +proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 19S +<32719> +proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 20S +<32720> +proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 21S +<32721> +proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 22S +<32722> +proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 23S +<32723> +proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 24S +<32724> +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 25S +<32725> +proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 26S +<32726> +proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 27S +<32727> +proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 28S +<32728> +proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 29S +<32729> +proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 30S +<32730> +proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 31S +<32731> +proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 32S +<32732> +proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 33S +<32733> +proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 34S +<32734> +proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 35S +<32735> +proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 36S +<32736> +proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 37S +<32737> +proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 38S +<32738> +proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 39S +<32739> +proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 40S +<32740> +proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 41S +<32741> +proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 42S +<32742> +proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 43S +<32743> +proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 44S +<32744> +proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 45S +<32745> +proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 46S +<32746> +proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 47S +<32747> +proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 48S +<32748> +proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 49S +<32749> +proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 50S +<32750> +proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 51S +<32751> +proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 52S +<32752> +proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 53S +<32753> +proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 54S +<32754> +proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 55S +<32755> +proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 56S +<32756> +proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 57S +<32757> +proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 58S +<32758> +proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 59S +<32759> +proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UTM zone 60S +<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 +datum=WGS84 +units=m +no_defs <> +# TWD97 +<3822> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IGRS +<3887> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# MOLDREF99 +<4000> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGRDC 2005 +<4039> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# SREF98 +<4073> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# REGCAN95 +<4079> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# WGS 84 (geocentric) +<4328> +proj=geocent +datum=WGS84 +units=m +no_defs <> +# ITRF88 (geocentric) +<4330> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF89 (geocentric) +<4331> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF90 (geocentric) +<4332> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF91 (geocentric) +<4333> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF92 (geocentric) +<4334> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF93 (geocentric) +<4335> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF94 (geocentric) +<4336> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF96 (geocentric) +<4337> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF97 (geocentric) +<4338> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Australian Antarctic (geocentric) +<4340> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# EST97 (geocentric) +<4342> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# CHTRF95 (geocentric) +<4344> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ETRS89 (geocentric) +<4346> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# GDA94 (geocentric) +<4348> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Hartebeesthoek94 (geocentric) +<4350> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# IRENET95 (geocentric) +<4352> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# JGD2000 (geocentric) +<4354> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# LKS94 (ETRS89) (geocentric) +<4356> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Moznet (geocentric) +<4358> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# NAD83(CSRS) (geocentric) +<4360> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NAD83(HARN) (geocentric) +<4362> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NZGD2000 (geocentric) +<4364> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# POSGAR 98 (geocentric) +<4366> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# REGVEN (geocentric) +<4368> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGF93 (geocentric) +<4370> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGFG95 (geocentric) +<4372> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGR92 (geocentric) +<4374> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# SIRGAS (geocentric) +<4376> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# SWEREF99 (geocentric) +<4378> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Yemen NGN96 (geocentric) +<4380> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# RGNC 1991 (geocentric) +<4382> +proj=geocent +ellps=intl +units=m +no_defs <> +# RRAF 1991 (geocentric) +<4384> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# ITRF2000 (geocentric) +<4385> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ISN93 (geocentric) +<4387> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# LKS92 (geocentric) +<4389> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGSPM06 +<4465> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGM04 +<4468> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Cadastre 1997 +<4473> +proj=geocent +ellps=intl +units=m +no_defs <> +# China Geodetic Coordinate System 2000 +<4479> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Mexico ITRF92 +<4481> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RRAF 1991 +<4556> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Slovenia 1996 +<4882> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RSRGD2000 +<4884> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# BDA2000 +<4886> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# HTRS96 +<4888> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# WGS 66 +<4890> +proj=geocent +ellps=WGS66 +units=m +no_defs <> +# NAD83(NSRS2007) +<4892> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# JAD2001 +<4894> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# ITRF2005 +<4896> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# DGN95 +<4897> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# LGD2006 +<4899> +proj=geocent +ellps=intl +units=m +no_defs <> +# RGNC91-93 +<4906> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# GR96 +<4908> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF88 +<4910> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF89 +<4911> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF90 +<4912> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF91 +<4913> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF92 +<4914> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF93 +<4915> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF94 +<4916> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF96 +<4917> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF97 +<4918> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF2000 +<4919> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# GDM2000 +<4920> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# PZ-90 +<4922> +proj=geocent +a=6378136 +b=6356751.361745712 +units=m +no_defs <> +# Mauritania 1999 +<4924> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Korea 2000 +<4926> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# POSGAR 94 +<4928> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# Australian Antarctic +<4930> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# CHTRF95 +<4932> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# EST97 +<4934> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ETRS89 +<4936> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# GDA94 +<4938> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Hartebeesthoek94 +<4940> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# IRENET95 +<4942> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ISN93 +<4944> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# JGD2000 +<4946> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# LKS92 +<4948> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# LKS94 +<4950> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Moznet +<4952> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# NAD83(CSRS) +<4954> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NAD83(HARN) +<4956> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NZGD2000 +<4958> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# POSGAR 98 +<4960> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# REGVEN +<4962> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGF93 +<4964> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGFG95 +<4966> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGNC 1991 +<4968> +proj=geocent +ellps=intl +units=m +no_defs <> +# RGR92 +<4970> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RRAF 1991 +<4972> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# SIRGAS 1995 +<4974> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# SWEREF99 +<4976> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# WGS 84 +<4978> +proj=geocent +datum=WGS84 +units=m +no_defs <> +# Yemen NGN96 +<4980> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# IGM95 +<4982> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# WGS 72 +<4984> +proj=geocent +ellps=WGS72 +units=m +no_defs <> +# WGS 72BE +<4986> +proj=geocent +ellps=WGS72 +units=m +no_defs <> +# SIRGAS 2000 +<4988> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Lao 1993 +<4990> +proj=geocent +ellps=krass +units=m +no_defs <> +# Lao 1997 +<4992> +proj=geocent +ellps=krass +units=m +no_defs <> +# PRS92 +<4994> +proj=geocent +ellps=clrk66 +units=m +no_defs <> +# MAGNA-SIRGAS +<4996> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGPF +<4998> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# PTRA08 +<5011> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# GDBD2009 +<5244> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# TUREF +<5250> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# DRUKREF 03 +<5262> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ISN2004 +<5322> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# ITRF2008 +<5332> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# POSGAR 2007 +<5341> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# MARGEN +<5352> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# SIRGAS-Chile +<5358> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# CR05 +<5363> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# MACARIO SOLIS +<5368> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Peru96 +<5369> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# SIRGAS-ROU98 +<5379> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# SIRGAS_ES2007.8 +<5391> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGAF09 +<5487> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# PNG94 +<5544> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# UCS-2000 +<5558> +proj=geocent +ellps=krass +units=m +no_defs <> +# FEH2010 +<5591> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# DB_REF +<5828> +proj=geocent +ellps=bessel +units=m +no_defs <> +# TGD2005 +<5884> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# CIGD11 +<6133> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# CGRS93 +<6309> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# NAD83(2011) +<6317> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NAD83(PA11) +<6320> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NAD83(MA11) +<6323> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Mexico ITRF2008 +<6363> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# JGD2011 +<6666> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RDN2008 +<6704> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# NAD83(CORS96) +<6781> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IGS08 +<6934> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IGD05 +<6978> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IG05 Intermediate CRS +<6981> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IGD05/12 +<6985> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IG05/12 Intermediate CRS +<6988> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# RGTAAF07 +<7071> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# IGD05 +<7134> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# IGD05/12 +<7137> +proj=geocent +ellps=WGS84 +units=m +no_defs <> +# ONGD14 +<7371> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# Kyrg-06 +<7684> +proj=geocent +ellps=GRS80 +units=m +no_defs <> +# KKJ / Finland Uniform Coordinate System + N60 height +<3901> +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 +vunits=m +no_defs <> +# ETRS89 / TM35FIN(N,E) + N60 height +<3902> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / TM35FIN(N,E) + N2000 height +<3903> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / DKTM1 + DVR90 height +<4097> +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 +vunits=m +no_defs <> +# ETRS89 / DKTM2 + DVR90 height +<4098> +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 +vunits=m +no_defs <> +# ETRS89 / DKTM3 + DVR90 height +<4099> +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 +vunits=m +no_defs <> +# ETRS89 / DKTM4 + DVR90 height +<4100> +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 +vunits=m +no_defs <> +# ETRS89 / Faroe TM + FVR09 height +<5318> +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 +vunits=m +no_defs <> +# NAD83 + NAVD88 height +<5498> +proj=longlat +datum=NAD83 +geoidgrids=g2012a_conus.gtx,g2012a_alaska.gtx,g2012a_guam.gtx,g2012a_hawaii.gtx,g2012a_puertorico.gtx,g2012a_samoa.gtx +vunits=m +no_defs <> +# NAD83(HARN) + NAVD88 height +<5499> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +geoidgrids=g2012a_conus.gtx,g2012a_alaska.gtx,g2012a_guam.gtx,g2012a_hawaii.gtx,g2012a_puertorico.gtx,g2012a_samoa.gtx +vunits=m +no_defs <> +# NAD83(NSRS2007) + NAVD88 height +<5500> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +geoidgrids=g2012a_conus.gtx,g2012a_alaska.gtx,g2012a_guam.gtx,g2012a_hawaii.gtx,g2012a_puertorico.gtx,g2012a_samoa.gtx +vunits=m +no_defs <> +# ETRS89 / UTM zone 31N + DHHN92 height +<5554> +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 32N + DHHN92 height +<5555> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 33N + DHHN92 height +<5556> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# FEH2010 / Fehmarnbelt TM + FCSVR10 height +<5598> +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 +vunits=m +no_defs <> +# SWEREF99 + RH2000 height +<5628> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> +# RGF93 / Lambert-93 + NGF-IGN69 height +<5698> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# RGF93 / Lambert-93 + NGF-IGN78 height +<5699> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone I + NGF-IGN69 height +<5707> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone IV + NGF-IGN78 height +<5708> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + DHHN92 height +<5832> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +vunits=m +no_defs <> +# DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + DHHN92 height +<5833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +vunits=m +no_defs <> +# DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + DHHN92 height +<5834> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +vunits=m +no_defs <> +# DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + DHHN92 height +<5835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +vunits=m +no_defs <> +# SWEREF99 TM + RH2000 height +<5845> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 12 00 + RH2000 height +<5846> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 13 30 + RH2000 height +<5847> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 15 00 + RH2000 height +<5848> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 16 30 + RH2000 height +<5849> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 18 00 + RH2000 height +<5850> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 14 15 + RH2000 height +<5851> +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 15 45 + RH2000 height +<5852> +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 17 15 + RH2000 height +<5853> +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 18 45 + RH2000 height +<5854> +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 20 15 + RH2000 height +<5855> +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 21 45 + RH2000 height +<5856> +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# SWEREF99 23 15 + RH2000 height +<5857> +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 +vunits=m +no_defs <> +# ETRS89 + NN2000 height +<5942> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> +# ETRS89 / NTM zone 5 + NN2000 height +<5945> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 6 + NN2000 height +<5946> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 7 + NN2000 height +<5947> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 8 + NN2000 height +<5948> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 9 + NN2000 height +<5949> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 10 + NN2000 height +<5950> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 11 + NN2000 height +<5951> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 12 + NN2000 height +<5952> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 13 + NN2000 height +<5953> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 14 + NN2000 height +<5954> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 15 + NN2000 height +<5955> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 16 + NN2000 height +<5956> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 17 + NN2000 height +<5957> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 18 + NN2000 height +<5958> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 19 + NN2000 height +<5959> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 20 + NN2000 height +<5960> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 21 + NN2000 height +<5961> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 22 + NN2000 height +<5962> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 23 + NN2000 height +<5963> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 24 + NN2000 height +<5964> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 25 + NN2000 height +<5965> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 26 + NN2000 height +<5966> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 27 + NN2000 height +<5967> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 28 + NN2000 height +<5968> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 29 + NN2000 height +<5969> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 30 + NN2000 height +<5970> +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 +vunits=m +no_defs <> +# ETRS89 / UTM zone 31 + NN2000 height +<5971> +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 32 + NN2000 height +<5972> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 33 + NN2000 height +<5973> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 34 + NN2000 height +<5974> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 35 + NN2000 height +<5975> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 36 + NN2000 height +<5976> +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 + NN54 height +<6144> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> +# ETRS89 / NTM zone 5 + NN54 height +<6145> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 6 + NN54 height +<6146> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 7 + NN54 height +<6147> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 8 + NN54 height +<6148> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 9 + NN54 height +<6149> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 10 + NN54 height +<6150> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 11 + NN54 height +<6151> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 12 + NN54 height +<6152> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 13 + NN54 height +<6153> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 14 + NN54 height +<6154> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 15 + NN54 height +<6155> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 16 + NN54 height +<6156> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 17 + NN54 height +<6157> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 18 + NN54 height +<6158> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 19 + NN54 height +<6159> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 20 + NN54 height +<6160> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 21 + NN54 height +<6161> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 22 + NN54 height +<6162> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 23 + NN54 height +<6163> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 24 + NN54 height +<6164> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 25 + NN54 height +<6165> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 26 + NN54 height +<6166> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 27 + NN54 height +<6167> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 28 + NN54 height +<6168> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 29 + NN54 height +<6169> +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 +vunits=m +no_defs <> +# ETRS89 / NTM zone 30 + NN54 height +<6170> +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 +vunits=m +no_defs <> +# ETRS89 / UTM zone 31 + NN54 height +<6171> +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 32 + NN54 height +<6172> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 33 + NN54 height +<6173> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 34 + NN54 height +<6174> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 35 + NN54 height +<6175> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 36 + NN54 height +<6176> +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# Belge 1972 / Belgian Lambert 72 + Ostend height +<6190> +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.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747 +units=m +vunits=m +no_defs <> +# NAD83(2011) + NAVD88 height +<6349> +proj=longlat +ellps=GRS80 +geoidgrids=g2012a_conus.gtx,g2012a_alaska.gtx,g2012a_guam.gtx,g2012a_hawaii.gtx,g2012a_puertorico.gtx,g2012a_samoa.gtx +vunits=m +no_defs <> +# NAD83(CSRS) + CGVD2013 height +<6649> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 7N + CGVD2013 height +<6650> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 8N + CGVD2013 height +<6651> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 9N + CGVD2013 height +<6652> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 10N + CGVD2013 height +<6653> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 11N + CGVD2013 height +<6654> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 12N + CGVD2013 height +<6655> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 13N + CGVD2013 height +<6656> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 14N + CGVD2013 height +<6657> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 15N + CGVD2013 height +<6658> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 16N + CGVD2013 height +<6659> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 17N + CGVD2013 height +<6660> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 18N + CGVD2013 height +<6661> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 19N + CGVD2013 height +<6662> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 20N + CGVD2013 height +<6663> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 21N + CGVD2013 height +<6664> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# NAD83(CSRS) / UTM zone 22N + CGVD2013 height +<6665> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# JGD2000 + JGD2000 (vertical) height +<6696> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> +# JGD2011 + JGD2011 (vertical) height +<6697> +proj=longlat +ellps=GRS80 +vunits=m +no_defs <> +# Tokyo + JSLD72 height +<6700> +proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +vunits=m +no_defs <> +# WGS 84 / Pseudo-Mercator + EGM2008 geoid height +<6871> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +geoidgrids=egm08_25.gtx +vunits=m +no_defs <> +# WGS 84 / World Mercator + EGM2008 height +<6893> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +geoidgrids=egm08_25.gtx +vunits=m +no_defs <> +# SVY21 + SHD height +<6917> +proj=longlat +ellps=WGS84 +vunits=m +no_defs <> +# SVY21 / Singapore TM + SHD height +<6927> +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +vunits=m +no_defs <> +# NTF (Paris) + NGF IGN69 height +<7400> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +vunits=m +no_defs <> +# NTF (Paris) / France II + NGF Lallemand +<7401> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# NTF (Paris) / France II + NGF IGN69 +<7402> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# NTF (Paris) / France III + NGF IGN69 +<7403> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# RT90 + RH70 height +<7404> +proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +vunits=m +no_defs <> +# OSGB 1936 / British National Grid + ODN height +<7405> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +vunits=m +no_defs <> +# NAD27 + NGVD29 height +<7406> +proj=longlat +datum=NAD27 +vunits=us-ft +no_defs <> +# NAD27 / Texas North + NGVD29 height +<7407> +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 +vunits=us-ft +no_defs <> +# RD/NAP +<7408> +proj=longlat +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957,0.343988,-1.87740,4.0725 +vunits=m +no_defs <> +# ETRS89 + EVRF2000 height +<7409> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> +# PSHD93 +<7410> +proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006 +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone II + NGF Lallemand height +<7411> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone II + NGF IGN69 +<7412> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone III + NGF IGN69 +<7413> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# Tokyo + JSLD69 height +<7414> +proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +vunits=m +no_defs <> +# Amersfoort / RD New + NAP height +<7415> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957,0.343988,-1.87740,4.0725 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 32N + DVR90 height +<7416> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / UTM zone 33N + DVR90 height +<7417> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +vunits=m +no_defs <> +# ETRS89 / Kp2000 Jutland + DVR90 height +<7418> +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 +vunits=m +no_defs <> +# ETRS89 / Kp2000 Zealand + DVR90 height +<7419> +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 +vunits=m +no_defs <> +# ETRS89 / Kp2000 Bornholm + DVR90 height +<7420> +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 +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone II + NGF-IGN69 height +<7421> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# NTF (Paris) / Lambert zone III + NGF-IGN69 height +<7422> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +vunits=m +no_defs <> +# ETRS89 + EVRF2007 height +<7423> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +vunits=m +no_defs <> diff --git a/proj4/nad/epsg-deprecated b/proj4/nad/epsg-deprecated new file mode 100644 index 000000000000..2b5e9fa844fd --- /dev/null +++ b/proj4/nad/epsg-deprecated @@ -0,0 +1,2 @@ +# DHDN / Germany zone 3 +<31493> +proj=tmerc +lat_0=0.000000000 +lon_0=9.000000000 +k=1.000000 +x_0=3500000.000 +y_0=0.000 +ellps=bessel +units=m no_defs <> diff --git a/proj4/nad/esri b/proj4/nad/esri new file mode 100644 index 000000000000..ddee64b1babd --- /dev/null +++ b/proj4/nad/esri @@ -0,0 +1,5937 @@ +# Anguilla 1957 / British West Indies Grid +<2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> +# Antigua 1943 / British West Indies Grid +<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs no_defs <> +# Dominica 1945 / British West Indies Grid +<2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs no_defs <> +# Grenada 1953 / British West Indies Grid +<2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs no_defs <> +# Montserrat 58 / British West Indies Grid +<2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs no_defs <> +# St Kitts 1955 / British West Indies Grid +<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs no_defs <> +# St Lucia 1955 / British West Indies Grid +<2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs no_defs <> +# St Vincent 45 / British West Indies Grid +<2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 2 +<2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 3 +<2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 4 +<2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 5 +<2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 6 +<2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 7 +<2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 8 +<2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 9 +<2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / SCoPQ zone 10 +<2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 8 +<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 9 +<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 10 +<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 11 +<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 12 +<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 13 +<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 14 +<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 15 +<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 16 +<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / MTM zone 17 +<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / UTM zone 15N +<2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / UTM zone 16N +<2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / UTM zone 17N +<2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(76) / UTM zone 18N +<2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / UTM zone 17N +<2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / UTM zone 18N +<2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / UTM zone 19N +<2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / UTM zone 20N +<2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD27(CGQ77) / UTM zone 21N +<2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / New Brunswick Stereo +<2036> +proj=stere +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 no_defs <> +# NAD83(CSRS98) / UTM zone 19N +<2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 20N +<2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# Israel / Israeli TM Grid +<2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.000007 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs no_defs <> +# Locodjo 1965 / UTM zone 30N +<2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> +# Abidjan 1987 / UTM zone 30N +<2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> +# Locodjo 1965 / UTM zone 29N +<2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> +# Abidjan 1987 / UTM zone 29N +<2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> +# Hanoi 1972 / Gauss-Kruger zone 18 +<2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> +# Hanoi 1972 / Gauss-Kruger zone 19 +<2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> +# Hartebeesthoek94 / Lo15 +# Hartebeesthoek94 / Lo17 +# Hartebeesthoek94 / Lo19 +# Hartebeesthoek94 / Lo21 +# Hartebeesthoek94 / Lo23 +# Hartebeesthoek94 / Lo25 +# Hartebeesthoek94 / Lo27 +# Hartebeesthoek94 / Lo29 +# Hartebeesthoek94 / Lo31 +# Hartebeesthoek94 / Lo33 +# CH1903+ / LV95 +<2056> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs 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 no_defs <> +# ED50(ED77) / UTM zone 38N +<2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> +# ED50(ED77) / UTM zone 39N +<2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> +# ED50(ED77) / UTM zone 40N +<2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs no_defs <> +# ED50(ED77) / UTM zone 41N +<2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs no_defs <> +# Madrid 1870 (Madrid) / Spain +<2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=-3.687938888888889 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669562 +pm=madrid +units=m +no_defs no_defs <> +# Dabola 1981 / UTM zone 28N +<2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> +# Dabola 1981 / UTM zone 29N +<2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> +# S-JTSK (Ferro) / Krovak +<2065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# Mount Dillon / Tobago Grid +<2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66154375 +y_0=36209.915082 +a=6378293.63683822 +b=6356617.979337744 +to_meter=0.2011661949 +no_defs no_defs <> +# Naparima 1955 / UTM zone 20N +<2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 5 +<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 6 +<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 7 +<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 8 +<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 9 +<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 10 +<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 11 +<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 12 +<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / Libya zone 13 +<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / UTM zone 32N +<2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / UTM zone 33N +<2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / UTM zone 34N +<2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> +# ELD79 / UTM zone 35N +<2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> +# Chos Malal 1914 / Argentina zone 2 +<2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Pampa del Castillo / Argentina zone 2 +<2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Hito XVIII 1963 / Argentina zone 2 +<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> +# Hito XVIII 1963 / UTM zone 19S +<2084> +proj=utm +zone=19 +south +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> +# NAD27 / Cuba Norte +<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 no_defs <> +# NAD27 / Cuba Sur +<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 no_defs <> +# ELD79 / TM 12 NE +<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Carthage / TM 11 NE +<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999600 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs 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 no_defs <> +# Yemen NGN96 / UTM zone 39N +<2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# South Yemen / Gauss Kruger zone 8 +<2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> +# South Yemen / Gauss Kruger zone 9 +<2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> +# Hanoi 1972 / GK 106 NE +<2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> +# WGS 72BE / TM 106 NE +<2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs 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 no_defs <> +# Korean 1985 / Korea East Belt +<2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> +# Korean 1985 / Korea Central Belt +<2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> +# Korean 1985 / Korea West Belt +<2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs 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 no_defs <> +# GGRS87 / Greek Grid +<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs 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 no_defs <> +# Lake / Maracaibo Grid +<2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs no_defs <> +# Lake / Maracaibo Grid M3 +<2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs no_defs <> +# Lake / Maracaibo La Rosa Grid +<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs no_defs <> +# NZGD2000 / Mount Eden Circuit 2000 +<2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.999900 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Bay of Plenty Circuit 2000 +<2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Poverty Bay Circuit 2000 +<2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Hawkes Bay Circuit 2000 +<2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Taranaki Circuit 2000 +<2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Tuhirangi Circuit 2000 +<2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Wanganui Circuit 2000 +<2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Wairarapa Circuit 2000 +<2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Wellington Circuit 2000 +<2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Collingwood Circuit 2000 +<2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Nelson Circuit 2000 +<2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Karamea Circuit 2000 +<2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Buller Circuit 2000 +<2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Grey Circuit 2000 +<2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Amuri Circuit 2000 +<2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Marlborough Circuit 2000 +<2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Hokitika Circuit 2000 +<2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Okarito Circuit 2000 +<2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Jacksons Bay Circuit 2000 +<2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Mount Pleasant Circuit 2000 +<2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Gawler Circuit 2000 +<2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Timaru Circuit 2000 +<2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Lindis Peak Circuit 2000 +<2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Mount Nicholas Circuit 2000 +<2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Mount York Circuit 2000 +<2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Observation Point Circuit 2000 +<2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / North Taieri Circuit 2000 +<2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.999960 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / Bluff Circuit 2000 +<2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / UTM zone 58S +<2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / UTM zone 59S +<2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NZGD2000 / UTM zone 60S +<2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# Accra / Ghana National Grid +<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +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 no_defs <> +# Accra / TM 1 NW +<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.999600 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs 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 no_defs <> +# NAD83(CSRS98) / SCoPQ zone 2 +<2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 3 +<2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 4 +<2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 5 +<2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 6 +<2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 7 +<2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 8 +<2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 9 +<2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / MTM zone 10 +<2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 21N +<2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 18N +<2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 17N +<2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 13N +<2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 12N +<2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / UTM zone 11N +<2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# RGF93 / Lambert-93 +<2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# American Samoa 1962 / American Samoa Lambert +<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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / UTM zone 59S +<2156> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# IRENET95 / Irish Transverse Mercator +<2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.999820 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# IRENET95 / UTM zone 29N +<2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# Sierra Leone 1924 / New Colony Grid +<2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> +# Sierra Leone 1924 / New War Office Grid +<2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> +# Sierra Leone 1968 / UTM zone 28N +<2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs 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 no_defs <> +# 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 no_defs <> +# Locodjo 1965 / TM 5 NW +<2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> +# Abidjan 1987 / TM 5 NW +<2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> +# Pulkovo 1942(83) / Gauss Kruger zone 3 +<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> +# Pulkovo 1942(83) / Gauss Kruger zone 4 +<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> +# Pulkovo 1942(83) / Gauss Kruger zone 5 +<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> +# Luxembourg 1930 / Gauss +<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1.000000 +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 no_defs <> +# MGI / Slovenia Grid +<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Pulkovo 1942(58) / Poland zone I +<2171> +proj=stere +lat_0=50.625 +lon_0=21.08333333333333 +k=0.999800 +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 no_defs <> +# Pulkovo 1942(58) / Poland zone II +<2172> +proj=stere +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.999800 +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 no_defs <> +# Pulkovo 1942(58) / Poland zone III +<2173> +proj=stere +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.999800 +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 no_defs <> +# Pulkovo 1942(58) / Poland zone IV +<2174> +proj=stere +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.999800 +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 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 +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs 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 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 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 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 no_defs <> +# ETRS89 / Poland CS92 +<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999300 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs no_defs <> +# Azores Occidental 1939 / UTM zone 25N +<2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs no_defs <> +# Azores Central 1948 / UTM zone 26N +<2189> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> +# Azores Oriental 1940 / UTM zone 26N +<2190> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> +# Madeira 1936 / UTM zone 28N +<2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs 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 no_defs <> +# NZGD2000 / New Zealand Transverse Mercator +<2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.999600 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# American Samoa 1962 / American Samoa Lambert +<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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / UTM zone 2S +<2195> +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# ETRS89 / Kp2000 Jutland +<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.999950 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / Kp2000 Zealand +<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999950 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / Kp2000 Bornholm +<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# Albanian 1987 / Gauss Kruger zone 4 +<2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# ATS77 / New Brunswick Stereographic (ATS77) +<2200> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> +# REGVEN / UTM zone 18N +<2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# REGVEN / UTM zone 19N +<2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# REGVEN / UTM zone 20N +<2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 9 +<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 10 +<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 11 +<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 12 +<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 13 +<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 14 +<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / 3-degree Gauss-Kruger zone 15 +<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ETRS89 / TM 30 NE +<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# Douala 1948 / AOF west +<2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs 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 no_defs <> +# Qornoq 1927 / UTM zone 22N +<2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs no_defs <> +# Qornoq 1927 / UTM zone 23N +<2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs no_defs <> +# ATS77 / UTM zone 19N +<2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> +# ATS77 / UTM zone 20N +<2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> +# NAD83 / Arizona East (ft) +<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> +# NAD83 / Arizona Central (ft) +<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> +# NAD83 / Arizona West (ft) +<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Florida East (ftUS) +<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Florida West (ftUS) +<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Georgia East (ftUS) +<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Georgia West (ftUS) +<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Idaho East (ftUS) +<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Idaho Central (ftUS) +<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Idaho West (ftUS) +<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Indiana East (ftUS) +<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Indiana West (ftUS) +<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048 +no_defs no_defs <> +# NAD83 / Mississippi East (ftUS) +<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / Mississippi West (ftUS) +<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048 +no_defs no_defs <> +# NAD83 / New Mexico East (ftUS) +<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / New Mexico Central (ftUS) +<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / New Mexico West (ftUS) +<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / New York East (ftUS) +<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / New York Central (ftUS) +<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / New York West (ftUS) +<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# ATS77 / Prince Edward Isl. Stereographic (ATS77) +<2290> +proj=stere +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 no_defs <> +# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) +<2291> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> +# NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) +<2292> +proj=stere +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 no_defs <> +# ATS77 / MTM Nova Scotia zone 4 +<2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> +# ATS77 / MTM Nova Scotia zone 5 +<2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> +# Batavia / TM 109 SE +<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs no_defs <> +# WGS 84 / TM 116 SE +<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / TM 132 SE +<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / TM 6 NE +<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# Garoua / UTM zone 33N +<2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> +# Kousseri / UTM zone 33N +<2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> +# Trinidad 1903 / Trinidad Grid (ftCla) +<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380699999 +y_0=65379.01334249999 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.304797265 +no_defs no_defs <> +# Campo Inchauspe / UTM zone 19S +<2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / UTM zone 20S +<2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs 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 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 no_defs <> +# ED50 / TM27 +<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM30 +<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM33 +<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM36 +<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM39 +<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM42 +<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM45 +<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Hong Kong 1980 Grid System +<2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +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 no_defs <> +# Xian 1980 / Gauss-Kruger zone 13 +<2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 14 +<2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 15 +<2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 16 +<2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 17 +<2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 18 +<2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 19 +<2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 20 +<2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 21 +<2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 22 +<2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger zone 23 +<2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 75E +<2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 81E +<2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 87E +<2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 93E +<2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 99E +<2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 105E +<2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 111E +<2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 117E +<2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 123E +<2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 129E +<2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / Gauss-Kruger CM 135E +<2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 25 +<2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 26 +<2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 27 +<2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 28 +<2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 29 +<2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 30 +<2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 31 +<2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 32 +<2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 33 +<2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 34 +<2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 35 +<2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 36 +<2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 37 +<2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 38 +<2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 39 +<2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 40 +<2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 41 +<2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 42 +<2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 43 +<2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 44 +<2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger zone 45 +<2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 75E +<2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 78E +<2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 81E +<2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 84E +<2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 87E +<2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 90E +<2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 93E +<2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 96E +<2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 99E +<2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 102E +<2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 105E +<2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 108E +<2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 111E +<2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 114E +<2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 117E +<2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 120E +<2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 123E +<2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 126E +<2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 129E +<2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 132E +<2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# Xian 1980 / 3-degree Gauss-Kruger CM 135E +<2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> +# KKJ / Finland zone 1 +<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> +# KKJ / Finland zone 2 +<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> +# KKJ / Finland Uniform Coordinate System +<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> +# KKJ / Finland zone 4 +<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> +# South Yemen / Gauss-Kruger zone 8 +<2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> +# South Yemen / Gauss-Kruger zone 9 +<2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> +# Pulkovo 1942(83) / Gauss-Kruger zone 3 +<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> +# Pulkovo 1942(83) / Gauss-Kruger zone 4 +<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> +# Pulkovo 1942(83) / Gauss-Kruger zone 5 +<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> +# RT90 2.5 gon W +<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 25 +<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 26 +<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 27 +<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 28 +<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 29 +<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 30 +<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 31 +<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 32 +<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 33 +<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 34 +<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 35 +<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 36 +<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 37 +<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 38 +<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 39 +<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 40 +<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 41 +<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 42 +<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 43 +<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 44 +<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger zone 45 +<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 75E +<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 78E +<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 81E +<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 84E +<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 87E +<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 90E +<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 93E +<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 96E +<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 99E +<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 102E +<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 105E +<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 108E +<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 111E +<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 114E +<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 117E +<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 120E +<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 123E +<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 126E +<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 129E +<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 132E +<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / 3-degree Gauss-Kruger CM 135E +<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS I +<2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS II +<2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS III +<2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS IV +<2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS V +<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS VI +<2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS VII +<2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS VIII +<2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS IX +<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS X +<2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XI +<2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XII +<2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XIII +<2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XIV +<2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XV +<2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XVI +<2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XVII +<2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XVIII +<2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# JGD2000 / Japan Plane Rectangular CS XIX +<2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# Albanian 1987 / Gauss-Kruger zone 4 +<2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 21E +<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 27E +<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 33E +<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 39E +<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 45E +<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 51E +<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 57E +<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 63E +<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 69E +<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 75E +<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 81E +<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 87E +<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 93E +<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 99E +<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 105E +<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 111E +<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 117E +<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 123E +<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 129E +<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 135E +<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 141E +<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 147E +<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 153E +<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 159E +<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 165E +<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 171E +<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 177E +<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 177W +<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger CM 171W +<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 9E +<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 15E +<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 21E +<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 27E +<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 33E +<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 39E +<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 45E +<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 51E +<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 57E +<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 63E +<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 69E +<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 75E +<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 81E +<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 87E +<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 93E +<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 99E +<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 105E +<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 111E +<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 117E +<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 123E +<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 129E +<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 135E +<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 141E +<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 147E +<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 153E +<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 159E +<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 165E +<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 171E +<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 177E +<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 177W +<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger CM 171W +<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 +<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 +<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 +<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 +<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 +<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 +<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 +<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 +<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 +<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 +<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 +<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 +<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 +<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 +<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 +<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 +<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 +<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 +<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 +<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 +<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 +<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 +<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 +<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 +<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 +<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 +<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 +<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Samboja / UTM zone 50S +<2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 +<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 +<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 +<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 +<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 +<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 +<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 +<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 +<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 +<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 +<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 +<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 +<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 +<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 +<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 +<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 +<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 +<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 +<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 +<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 +<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 +<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 +<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 +<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 +<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 +<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 +<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 +<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 +<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 +<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 +<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 +<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E +<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E +<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E +<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E +<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E +<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E +<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E +<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E +<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E +<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E +<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E +<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E +<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E +<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E +<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E +<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E +<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E +<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E +<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Lietuvos Koordinoei Sistema 1994 +<2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999800 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E +<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E +<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E +<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E +<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E +<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E +<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E +<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E +<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E +<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E +<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E +<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E +<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E +<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E +<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E +<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E +<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E +<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E +<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E +<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E +<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E +<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E +<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E +<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E +<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E +<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E +<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E +<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E +<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E +<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E +<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E +<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E +<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E +<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E +<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E +<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E +<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W +<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W +<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W +<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W +<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 +<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 +<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 +<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 +<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 +<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 +<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 +<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 +<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 +<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 +<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 +<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 +<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 +<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 +<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 +<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 +<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 +<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 +<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 +<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 +<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 +<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 +<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 +<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 +<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 +<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 +<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 +<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 +<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 +<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 +<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 +<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 +<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 +<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 +<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 +<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 +<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 +<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 +<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 +<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 +<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 +<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 +<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 +<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 +<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 +<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 +<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 +<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 +<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 +<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 +<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 +<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 +<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 +<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 +<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 +<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 +<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 +<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 +<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E +<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E +<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E +<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E +<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E +<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E +<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E +<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E +<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E +<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E +<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E +<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E +<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E +<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E +<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E +<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E +<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E +<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E +<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E +<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E +<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E +<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E +<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E +<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E +<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E +<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E +<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E +<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E +<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E +<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E +<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E +<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E +<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E +<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E +<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E +<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E +<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E +<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Tete / UTM zone 36S +<2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs no_defs <> +# Tete / UTM zone 37S +<2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E +<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E +<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E +<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E +<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E +<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E +<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E +<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E +<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E +<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E +<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E +<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E +<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E +<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E +<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E +<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E +<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E +<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W +<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W +<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W +<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W +<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# NAD83(HARN) / Alabama East +<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Alabama West +<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Arizona East +<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Arizona Central +<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Arizona West +<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Florida East +<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Florida West +<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Georgia East +<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Georgia West +<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Hawaii zone 1 +<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Hawaii zone 2 +<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Hawaii zone 3 +<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Hawaii zone 4 +<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Hawaii zone 5 +<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Idaho East +<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Idaho Central +<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Idaho West +<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Illinois East +<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Illinois West +<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Indiana East +<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Indiana West +<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Maine East +<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Maine West +<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Mississippi East +<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Mississippi West +<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Missouri East +<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Missouri Central +<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Missouri West +<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Nevada East +<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Nevada Central +<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Nevada West +<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New Hampshire +<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New Jersey +<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New Mexico East +<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New Mexico Central +<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New Mexico West +<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New York East +<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New York Central +<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / New York West +<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Rhode Island +<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Vermont +<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Wyoming East +<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Wyoming East Central +<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Wyoming West Central +<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Wyoming West +<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Puerto Rico & 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 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(HARN) / Arizona East (ft) +<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> +# NAD83(HARN) / Arizona Central (ft) +<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> +# NAD83(HARN) / Arizona West (ft) +<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Florida East (ftUS) +<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Florida West (ftUS) +<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Georgia East (ftUS) +<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Georgia West (ftUS) +<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Idaho East (ftUS) +<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Idaho Central (ftUS) +<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Idaho West (ftUS) +<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Indiana East (ftUS) +<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Indiana West (ftUS) +<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> +# NAD83(HARN) / Mississippi East (ftUS) +<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / Mississippi West (ftUS) +<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> +# NAD83(HARN) / New Mexico East (ftUS) +<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / New Mexico Central (ftUS) +<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / New Mexico West (ftUS) +<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / New York East (ftUS) +<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / New York Central (ftUS) +<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83(HARN) / New York West (ftUS) +<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs 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 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Beduaram / TM 13 NE +<2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999600 +x_0=500000.0000000001 +y_0=0 +a=6378249.2 +b=6356515 +to_meter=0.3048006096012192 +no_defs no_defs <> +# QND95 / Qatar National Grid +<2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +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 no_defs <> +# Segara / UTM zone 50S +<2933> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> +# Segara (Jakarta) / NEIEZ +<2934> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone A1 +<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1.000000 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone A2 +<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone A3 +<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone A4 +<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone K2 +<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone K3 +<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / CS63 zone K4 +<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Porto Santo / UTM zone 28N +<2942> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> +# Selvagem Grande / UTM zone 28N +<2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> +# NAD83(CSRS) / SCoPQ zone 2 +<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 3 +<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 4 +<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 5 +<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 6 +<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 7 +<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 8 +<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 9 +<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / MTM zone 10 +<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / New Brunswick Stereo +<2953> +proj=stere +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 no_defs <> +# NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) +<2954> +proj=stere +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 no_defs <> +# NAD83(CSRS) / UTM zone 11N +<2955> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 12N +<2956> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 13N +<2957> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 17N +<2958> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 18N +<2959> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 19N +<2960> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 20N +<2961> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# NAD83(CSRS) / UTM zone 21N +<2962> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 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 no_defs <> +# Indian 1960 / UTM zone 48N +<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> +# Indian 1960 / UTM zone 49N +<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> +# Indian 1960 / TM 106 NE +<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs 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 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 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 no_defs <> +# PSD93 / UTM zone 39N +<3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> +# PSD93 / UTM zone 40N +<3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> +# Old Hawaiian / Hawaii zone 1 +<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Old Hawaiian / Hawaii zone 2 +<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Old Hawaiian / Hawaii zone 3 +<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Old Hawaiian / Hawaii zone 4 +<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Old Hawaiian / Hawaii zone 5 +<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Puerto Rico / UTM zone 20N +<3920> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> +# Puerto Rico State Plane CS of 1927 +<3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Puerto Rico / St. Croix +<3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> +# Unknown datum based upon the Airy 1830 ellipsoid +<4001> +proj=longlat +ellps=airy +no_defs no_defs <> +# Unknown datum based upon the Airy Modified 1849 ellipsoid +<4002> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> +# Unknown datum based upon the Australian National Spheroid +<4003> +proj=longlat +ellps=aust_SA +no_defs no_defs <> +# Unknown datum based upon the Bessel 1841 ellipsoid +<4004> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Unknown datum based upon the Bessel Modified ellipsoid +<4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs no_defs <> +# Unknown datum based upon the Bessel Namibia ellipsoid +<4006> +proj=longlat +ellps=bess_nam +no_defs no_defs <> +# Unknown datum based upon the Clarke 1858 ellipsoid +<4007> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1866 ellipsoid +<4008> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1866 Michigan ellipsoid +<4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid +<4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1880 (IGN) ellipsoid +<4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1880 (RGS) ellipsoid +<4012> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1880 (Arc) ellipsoid +<4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid +<4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs no_defs <> +# Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid +<4015> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> +# Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid +<4016> +proj=longlat +ellps=evrstSS +no_defs no_defs <> +# Unknown datum based upon the Everest 1830 Modified ellipsoid +<4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs no_defs <> +# Unknown datum based upon the GRS 1980 ellipsoid +<4019> +proj=longlat +ellps=GRS80 +no_defs no_defs <> +# Unknown datum based upon the Helmert 1906 ellipsoid +<4020> +proj=longlat +ellps=helmert +no_defs no_defs <> +# Unknown datum based upon the Indonesian National Spheroid +<4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> +# Unknown datum based upon the International 1924 ellipsoid +<4022> +proj=longlat +ellps=intl +no_defs no_defs <> +# Unknown datum based upon the Krassowsky 1940 ellipsoid +<4024> +proj=longlat +ellps=krass +no_defs no_defs <> +# Unknown datum based upon the NWL 9D ellipsoid +<4025> +proj=longlat +ellps=WGS66 +no_defs no_defs <> +# Unknown datum based upon the Plessis 1817 ellipsoid +<4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs no_defs <> +# Unknown datum based upon the Struve 1860 ellipsoid +<4028> +proj=longlat +a=6378298.3 +b=6356657.142669562 +no_defs no_defs <> +# Unknown datum based upon the War Office ellipsoid +<4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> +# Unknown datum based upon the WGS 84 ellipsoid +<4030> +proj=longlat +ellps=WGS84 +no_defs no_defs <> +# Unknown datum based upon the GEM 10C ellipsoid +<4031> +proj=longlat +ellps=WGS84 +no_defs no_defs <> +# Unknown datum based upon the OSU86F ellipsoid +<4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs no_defs <> +# Unknown datum based upon the OSU91A ellipsoid +<4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs no_defs <> +# Unknown datum based upon the Clarke 1880 ellipsoid +<4034> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Unknown datum based upon the Authalic Sphere +<4035> +proj=longlat +a=6371000 +b=6371000 +no_defs no_defs <> +# Unknown datum based upon the GRS 1967 ellipsoid +<4036> +proj=longlat +ellps=GRS67 +no_defs no_defs <> +# Unknown datum based upon the Average Terrestrial System 1977 ellipsoid +<4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> +# Unknown datum based upon the Everest (1830 Definition) ellipsoid +<4042> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> +# Unknown datum based upon the WGS 72 ellipsoid +<4043> +proj=longlat +ellps=WGS72 +no_defs no_defs <> +# Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid +<4044> +proj=longlat +a=6377301.243 +b=6356100.230165385 +no_defs no_defs <> +# Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid +<4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs no_defs <> +# Unspecified based upon the GRS 1980 Authalic Sphere +<4047> +proj=longlat +a=6370997 +b=6370997 +no_defs no_defs <> +# Greek +<4120> +proj=longlat +ellps=bessel +no_defs no_defs <> +# GGRS87 +<4121> +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs no_defs <> +# ATS77 +<4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> +# KKJ +<4123> +proj=longlat +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +no_defs no_defs <> +# RT90 +<4124> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Samboja +<4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> +# LKS94 (ETRS89) +<4126> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Tete +<4127> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Madzansua +<4128> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Observatario +<4129> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Moznet +<4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs no_defs <> +# Indian 1960 +<4131> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> +# FD58 +<4132> +proj=longlat +ellps=clrk80 +no_defs 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 no_defs <> +# PDO Survey Datum 1993 +<4134> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Old Hawaiian +<4135> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# St. Lawrence Island +<4136> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# St. Paul Island +<4137> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# St. George Island +<4138> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Puerto Rico +<4139> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# NAD83(CSRS98) +<4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Israel +<4141> +proj=longlat +ellps=GRS80 +no_defs no_defs <> +# Locodjo 1965 +<4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs no_defs <> +# Abidjan 1987 +<4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs no_defs <> +# Kalianpur 1937 +<4144> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> +# Kalianpur 1962 +<4145> +proj=longlat +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +no_defs no_defs <> +# Kalianpur 1975 +<4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs no_defs <> +# Hanoi 1972 +<4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs no_defs <> +# Hartebeesthoek94 +<4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# CH1903 +<4149> +proj=longlat +ellps=bessel +no_defs no_defs <> +# CH1903+ +<4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs no_defs <> +# CHTRF95 +<4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# NAD83(HARN) +<4152> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Rassadiran +<4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs no_defs <> +# ED50(ED77) +<4154> +proj=longlat +ellps=intl +no_defs no_defs <> +# Dabola 1981 +<4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs no_defs <> +# S-JTSK +<4156> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Mount Dillon +<4157> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> +# Naparima 1955 +<4158> +proj=longlat +ellps=intl +no_defs no_defs <> +# ELD79 +<4159> +proj=longlat +ellps=intl +no_defs no_defs <> +# Chos Malal 1914 +<4160> +proj=longlat +ellps=intl +no_defs no_defs <> +# Pampa del Castillo +<4161> +proj=longlat +ellps=intl +no_defs no_defs <> +# Korean 1985 +<4162> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Yemen NGN96 +<4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# South Yemen +<4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs no_defs <> +# Bissau +<4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs no_defs <> +# Korean 1995 +<4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# NZGD2000 +<4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Accra +<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs no_defs <> +# American Samoa 1962 +<4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs no_defs <> +# SIRGAS +<4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# RGF93 +<4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# POSGAR +<4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# IRENET95 +<4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Sierra Leone 1924 +<4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> +# Sierra Leone 1968 +<4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs no_defs <> +# Australian Antarctic +<4176> +proj=longlat +ellps=GRS80 +no_defs no_defs <> +# Pulkovo 1942(83) +<4178> +proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs no_defs <> +# Pulkovo 1942(58) +<4179> +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs no_defs <> +# EST97 +<4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 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 no_defs <> +# Azores Occidental 1939 +<4182> +proj=longlat +ellps=intl +no_defs no_defs <> +# Azores Central 1948 +<4183> +proj=longlat +ellps=intl +no_defs no_defs <> +# Azores Oriental 1940 +<4184> +proj=longlat +ellps=intl +no_defs no_defs <> +# Madeira 1936 +<4185> +proj=longlat +ellps=intl +no_defs no_defs <> +# OSNI 1952 +<4188> +proj=longlat +ellps=airy +no_defs no_defs <> +# REGVEN +<4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# POSGAR 98 +<4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Albanian 1987 +<4191> +proj=longlat +ellps=krass +no_defs no_defs <> +# Douala 1948 +<4192> +proj=longlat +ellps=intl +no_defs no_defs <> +# Manoca 1962 +<4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> +# Qornoq 1927 +<4194> +proj=longlat +ellps=intl +no_defs no_defs <> +# Scoresbysund 1952 +<4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs no_defs <> +# Ammassalik 1958 +<4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs no_defs <> +# Garoua +<4197> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Kousseri +<4198> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Egypt 1930 +<4199> +proj=longlat +ellps=intl +no_defs no_defs <> +# Pulkovo 1995 +<4200> +proj=longlat +ellps=krass +no_defs no_defs <> +# Adindan +<4201> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# AGD66 +<4202> +proj=longlat +ellps=aust_SA +no_defs no_defs <> +# AGD84 +<4203> +proj=longlat +ellps=aust_SA +no_defs no_defs <> +# Ain el Abd +<4204> +proj=longlat +ellps=intl +no_defs no_defs <> +# Afgooye +<4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs no_defs <> +# Agadez +<4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Lisbon +<4207> +proj=longlat +ellps=intl +no_defs no_defs <> +# Aratu +<4208> +proj=longlat +ellps=intl +no_defs no_defs <> +# Arc 1950 +<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> +# Arc 1960 +<4210> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Batavia +<4211> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Barbados 1938 +<4212> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Beduaram +<4213> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Beijing 1954 +<4214> +proj=longlat +ellps=krass +no_defs no_defs <> +# Belge 1950 +<4215> +proj=longlat +ellps=intl +no_defs no_defs <> +# Bermuda 1957 +<4216> +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs no_defs <> +# Bogota 1975 +<4218> +proj=longlat +ellps=intl +no_defs no_defs <> +# Bukit Rimpah +<4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs no_defs <> +# Camacupa +<4220> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Campo Inchauspe +<4221> +proj=longlat +ellps=intl +no_defs no_defs <> +# Cape +<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> +# Carthage +<4223> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Chua +<4224> +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs no_defs <> +# Corrego Alegre +<4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs no_defs <> +# Cote d'Ivoire +<4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Deir ez Zor +<4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Douala +<4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Egypt 1907 +<4229> +proj=longlat +ellps=helmert +no_defs no_defs <> +# ED50 +<4230> +proj=longlat +ellps=intl +no_defs no_defs <> +# ED87 +<4231> +proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.5076,0.1503,0.3898,-0.3143 +no_defs no_defs <> +# Fahud +<4232> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Gandajika 1970 +<4233> +proj=longlat +ellps=intl +no_defs no_defs <> +# Garoua +<4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Guyane Francaise +<4235> +proj=longlat +ellps=intl +no_defs no_defs <> +# Hu Tzu Shan +<4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs no_defs <> +# HD72 +<4237> +proj=longlat +ellps=GRS67 +no_defs no_defs <> +# ID74 +<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> +# Indian 1954 +<4239> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +no_defs no_defs <> +# Indian 1975 +<4240> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> +# Jamaica 1875 +<4241> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# JAD69 +<4242> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Kalianpur 1880 +<4243> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> +# Kandawala +<4244> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=-97,787,86,0,0,0,0 +no_defs no_defs <> +# Kertau +<4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs no_defs <> +# KOC +<4246> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# La Canoa +<4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs no_defs <> +# PSAD56 +<4248> +proj=longlat +ellps=intl +no_defs no_defs <> +# Lake +<4249> +proj=longlat +ellps=intl +no_defs no_defs <> +# Leigon +<4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs no_defs <> +# Liberia 1964 +<4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs no_defs <> +# Lome +<4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Luzon 1911 +<4253> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Hito XVIII 1963 +<4254> +proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +no_defs no_defs <> +# Herat North +<4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs no_defs <> +# Mahe 1971 +<4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs no_defs <> +# Makassar +<4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs no_defs <> +# ETRS89 +<4258> +proj=longlat +ellps=GRS80 +no_defs no_defs <> +# Malongo 1987 +<4259> +proj=longlat +ellps=intl +no_defs no_defs <> +# Manoca +<4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> +# Merchich +<4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs no_defs <> +# Massawa +<4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs no_defs <> +# Minna +<4263> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Mhast +<4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs no_defs <> +# Monte Mario +<4265> +proj=longlat +ellps=intl +no_defs no_defs <> +# M'poraloko +<4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# NAD27 +<4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs no_defs <> +# NAD27 Michigan +<4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> +# NAD83 +<4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs no_defs <> +# Nahrwan 1967 +<4270> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Naparima 1972 +<4271> +proj=longlat +ellps=intl +no_defs no_defs <> +# NZGD49 +<4272> +proj=longlat +ellps=intl +no_defs 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 no_defs <> +# Datum 73 +<4274> +proj=longlat +ellps=intl +no_defs no_defs <> +# NTF +<4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs no_defs <> +# NSWC 9Z-2 +<4276> +proj=longlat +ellps=WGS66 +no_defs no_defs <> +# OSGB 1936 +<4277> +proj=longlat +ellps=airy +no_defs no_defs <> +# OSGB70 +<4278> +proj=longlat +ellps=airy +no_defs no_defs <> +# OS(SN)80 +<4279> +proj=longlat +ellps=airy +no_defs no_defs <> +# Padang +<4280> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Palestine 1923 +<4281> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> +# Pointe Noire +<4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# GDA94 +<4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Pulkovo 1942 +<4284> +proj=longlat +ellps=krass +no_defs no_defs <> +# Qatar 1974 +<4285> +proj=longlat +ellps=intl +no_defs no_defs <> +# Qatar 1948 +<4286> +proj=longlat +ellps=helmert +no_defs no_defs <> +# Qornoq +<4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs no_defs <> +# Loma Quintana +<4288> +proj=longlat +ellps=intl +no_defs no_defs <> +# Amersfoort +<4289> +proj=longlat +ellps=bessel +no_defs no_defs <> +# SAD69 +<4291> +proj=longlat +ellps=GRS67 +no_defs no_defs <> +# Sapper Hill 1943 +<4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs no_defs <> +# Schwarzeck +<4293> +proj=longlat +ellps=bess_nam +no_defs no_defs <> +# Segora +<4294> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Serindung +<4295> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Sudan +<4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Tananarive +<4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs no_defs <> +# Timbalai 1948 +<4298> +proj=longlat +ellps=evrstSS +no_defs no_defs <> +# TM65 +<4299> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> +# TM75 +<4300> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> +# Tokyo +<4301> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Trinidad 1903 +<4302> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs no_defs <> +# TC(1948) +<4303> +proj=longlat +ellps=helmert +no_defs no_defs <> +# Voirol 1875 +<4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs no_defs <> +# Bern 1938 +<4306> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Nord Sahara 1959 +<4307> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# RT38 +<4308> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Yacare +<4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs no_defs <> +# Yoff +<4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> +# Zanderij +<4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs no_defs <> +# MGI +<4312> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Belge 1972 +<4313> +proj=longlat +ellps=intl +no_defs no_defs <> +# DHDN +<4314> +proj=longlat +ellps=bessel +no_defs no_defs <> +# Conakry 1905 +<4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs no_defs <> +# Dealul Piscului 1933 +<4316> +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs no_defs <> +# Dealul Piscului 1970 +<4317> +proj=longlat +ellps=krass +no_defs no_defs <> +# NGN +<4318> +proj=longlat +ellps=WGS84 +no_defs no_defs <> +# KUDAMS +<4319> +proj=longlat +ellps=GRS80 +no_defs no_defs <> +# WGS 72 +<4322> +proj=longlat +ellps=WGS72 +no_defs no_defs <> +# WGS 72BE +<4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs no_defs <> +# WGS 84 +<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <> +# Anguilla 1957 +<4600> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# Antigua 1943 +<4601> +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs no_defs <> +# Dominica 1945 +<4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs no_defs <> +# Grenada 1953 +<4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs no_defs <> +# Montserrat 1958 +<4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs no_defs <> +# St. Kitts 1955 +<4605> +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs no_defs <> +# St. Lucia 1955 +<4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs no_defs <> +# St. Vincent 1945 +<4607> +proj=longlat +ellps=clrk80 +no_defs no_defs <> +# NAD27(76) +<4608> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# NAD27(CGQ77) +<4609> +proj=longlat +ellps=clrk66 +no_defs no_defs <> +# Xian 1980 +<4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs no_defs <> +# Hong Kong 1980 +<4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs no_defs <> +# JGD2000 +<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Segara +<4613> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs 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 no_defs <> +# Porto Santo +<4615> +proj=longlat +ellps=intl +no_defs no_defs <> +# Selvagem Grande +<4616> +proj=longlat +ellps=intl +no_defs no_defs <> +# NAD83(CSRS) +<4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> +# Bern 1898 (Bern) +<4801> +proj=longlat +ellps=bessel +pm=bern +no_defs no_defs <> +# Bogota 1975 (Bogota) +<4802> +proj=longlat +ellps=intl +pm=bogota +no_defs no_defs <> +# Lisbon (Lisbon) +<4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs no_defs <> +# Makassar (Jakarta) +<4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs no_defs <> +# MGI (Ferro) +<4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> +# Monte Mario (Rome) +<4806> +proj=longlat +ellps=intl +pm=rome +no_defs no_defs <> +# NTF (Paris) +<4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs no_defs <> +# Padang (Jakarta) +<4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> +# Belge 1950 (Brussels) +<4809> +proj=longlat +ellps=intl +pm=brussels +no_defs no_defs <> +# Tananarive (Paris) +<4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs no_defs <> +# Voirol 1875 (Paris) +<4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs no_defs <> +# Batavia (Jakarta) +<4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> +# RT38 (Stockholm) +<4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs no_defs <> +# Greek (Athens) +<4815> +proj=longlat +ellps=bessel +pm=athens +no_defs no_defs <> +# Carthage (Paris) +<4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs 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 no_defs <> +# S-JTSK (Ferro) +<4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> +# Nord Sahara 1959 (Paris) +<4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs no_defs <> +# Segara (Jakarta) +<4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> +# ATF (Paris) +<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> +# NDG (Paris) +<4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> +# Madrid 1870 (Madrid) +<4903> +proj=longlat +a=6378298.3 +b=6356657.142669562 +pm=madrid +no_defs no_defs <> +# Lisbon 1890 (Lisbon) +<4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 4 +<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 5 +<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 6 +<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 7 +<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 8 +<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 9 +<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 10 +<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 11 +<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 12 +<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 13 +<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 14 +<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 15 +<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 16 +<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 17 +<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 18 +<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 19 +<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 20 +<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 21 +<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 22 +<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 23 +<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 24 +<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 25 +<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 26 +<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 27 +<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 28 +<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 29 +<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 30 +<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 31 +<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger zone 32 +<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 4N +<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 5N +<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 6N +<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 7N +<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 8N +<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 9N +<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 10N +<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 11N +<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 12N +<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 13N +<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 14N +<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 15N +<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 16N +<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 17N +<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 18N +<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 19N +<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 20N +<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 21N +<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 22N +<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 23N +<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 24N +<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 25N +<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 26N +<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 27N +<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 28N +<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 29N +<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 30N +<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 31N +<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1995 / Gauss-Kruger 32N +<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Adindan / UTM zone 37N +<20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> +# Adindan / UTM zone 38N +<20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> +# AGD66 / AMG zone 48 +<20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 49 +<20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 50 +<20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 51 +<20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 52 +<20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 53 +<20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 54 +<20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 55 +<20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 56 +<20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 57 +<20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD66 / AMG zone 58 +<20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 48 +<20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 49 +<20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 50 +<20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 51 +<20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 52 +<20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 53 +<20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 54 +<20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 55 +<20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 56 +<20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 57 +<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# AGD84 / AMG zone 58 +<20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> +# Ain el Abd / UTM zone 37N +<20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> +# Ain el Abd / UTM zone 38N +<20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> +# Ain el Abd / UTM zone 39N +<20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> +# Ain el Abd / Bahrain Grid +<20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs 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 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 no_defs <> +# Lisbon (Lisbon)/Portuguese National Grid +<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> +# Lisbon (Lisbon)/Portuguese Grid +<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> +# Aratu / UTM zone 22S +<20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> +# Aratu / UTM zone 23S +<20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs no_defs <> +# Aratu / UTM zone 24S +<20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs no_defs <> +# Arc 1950 / UTM zone 34S +<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> +# Arc 1950 / UTM zone 35S +<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> +# Arc 1950 / UTM zone 36S +<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> +# Arc 1960 / UTM zone 35S +<21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs no_defs <> +# Arc 1960 / UTM zone 36S +<21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs no_defs <> +# Arc 1960 / UTM zone 37S +<21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs no_defs <> +# Arc 1960 / UTM zone 35N +<21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs no_defs <> +# Arc 1960 / UTM zone 36N +<21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs no_defs <> +# Arc 1960 / UTM zone 37N +<21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> +# Batavia (Jakarta) / NEIEZ +<21100> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> +# Batavia / UTM zone 48S +<21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs no_defs <> +# Batavia / UTM zone 49S +<21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs no_defs <> +# Batavia / UTM zone 50S +<21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs no_defs <> +# Barbados 1938 / British West Indies Grid +<21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> +# Barbados 1938 / Barbados National Grid +<21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.999999 +x_0=30000 +y_0=75000 +ellps=clrk80 +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 13 +<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 14 +<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 15 +<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 16 +<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 17 +<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 18 +<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 19 +<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 20 +<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 21 +<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 22 +<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger zone 23 +<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 75E +<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 81E +<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 87E +<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 93E +<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 99E +<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 105E +<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 111E +<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 117E +<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 123E +<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 129E +<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger CM 135E +<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 13N +<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 14N +<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 15N +<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 16N +<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 17N +<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 18N +<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 19N +<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 20N +<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 21N +<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 22N +<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Beijing 1954 / Gauss-Kruger 23N +<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Belge 1950 (Brussels) / Belge Lambert 50 +<21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.367975 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs no_defs <> +# Bern 1898 (Bern) / LV03C +<21780> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs no_defs <> +# CH1903 / LV03 +<21781> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +no_defs no_defs <> +# Bogota 1975 / UTM zone 17N +<21817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs no_defs <> +# Bogota 1975 / UTM zone 18N +<21818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> +# Bogota 1975 / Colombia West zone +<21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> +# Bogota 1975 / Colombia Bogota zone +<21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> +# Bogota 1975 / Colombia East Central zone +<21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> +# Bogota 1975 / Colombia East +<21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> +# Camacupa / UTM zone 32S +<22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs no_defs <> +# Camacupa / UTM zone 33S +<22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs no_defs <> +# Camacupa / TM 11.30 SE +<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> +# Camacupa / TM 12 SE +<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 1 +<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 2 +<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 3 +<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 4 +<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 5 +<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 6 +<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Campo Inchauspe / Argentina 7 +<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Cape / UTM zone 34S +<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> +# Cape / UTM zone 35S +<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> +# Cape / UTM zone 36S +<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> +# South African Coordinate System zone 15 +# South African Coordinate System zone 17 +# South African Coordinate System zone 19 +# South African Coordinate System zone 21 +# South African Coordinate System zone 23 +# South African Coordinate System zone 25 +# South African Coordinate System zone 27 +# South African Coordinate System zone 29 +# South African Coordinate System zone 31 +# South African Coordinate System zone 33 +# Carthage (Paris) / Tunisia Mining Grid +# Carthage / UTM zone 32N +<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs 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 +units=m +no_defs 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 +units=m +no_defs no_defs <> +# Corrego Alegre / UTM zone 23S +<22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> +# Corrego Alegre / UTM zone 24S +<22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs 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 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 no_defs <> +# Deir ez Zor / Levant Stereographic +<22780> +proj=stere +lat_0=34.2 +lon_0=39.15 +k=0.999534 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# Douala / UTM zone 32N +<22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# Egypt 1907 / Blue Belt +<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1.000000 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs no_defs <> +# Egypt 1907 / Red Belt +<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1.000000 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs no_defs <> +# Egypt 1907 / Purple Belt +<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs no_defs <> +# Egypt 1907 / Extended Purple Belt +<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs no_defs <> +# ED50 / UTM zone 28N +<23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 29N +<23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 30N +<23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 31N +<23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 32N +<23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 33N +<23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 34N +<23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 35N +<23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 36N +<23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 37N +<23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / UTM zone 38N +<23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM 0 N +<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# ED50 / TM 5 NE +<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> +# Fahud / UTM zone 39N +<23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> +# Fahud / UTM zone 40N +<23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> +# Garoua / UTM zone 33N +<23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# HD72 / EOV +<23700> +proj=omerc +lat_0=47.14439372222222 +lonc=19.04857177777778 +alpha=90 +k=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs no_defs <> +# ID74 / UTM zone 46N +<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 47N +<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 48N +<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 49N +<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 50N +<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 51N +<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 52N +<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 53N +<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 46S +<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 47S +<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 48S +<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 49S +<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 50S +<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 51S +<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 52S +<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 53S +<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# ID74 / UTM zone 54S +<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> +# Indian 1954 / UTM zone 46N +<23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> +# Indian 1954 / UTM zone 47N +<23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> +# Indian 1954 / UTM zone 48N +<23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> +# Indian 1975 / UTM zone 47N +<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> +# Indian 1975 / UTM zone 48N +<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs 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.49575 +y_0=121918.906 +ellps=clrk80 +to_meter=0.304797265 +no_defs 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 no_defs <> +# Kalianpur 1937 / UTM zone 45N +<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> +# Kalianpur 1937 / UTM zone 46N +<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> +# Kalianpur 1962 / UTM zone 41N +<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1962 / UTM zone 42N +<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1962 / UTM zone 43N +<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs 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 no_defs <> +# Kalianpur 1975 / UTM zone 43N +<24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1975 / UTM zone 44N +<24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1975 / UTM zone 45N +<24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1975 / UTM zone 46N +<24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1975 / UTM zone 47N +<24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> +# Kalianpur 1880 / India zone 0 +<24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> +# Kalianpur 1880 / India zone I +<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.357204817 +to_meter=0.9143985307444408 +no_defs 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.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> +# Kalianpur 1880 / India zone III +<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.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> +# Kalianpur 1880 / India zone IV +<24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs 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.413140239 +units=m +no_defs 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.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs 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.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs 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 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 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 no_defs <> +# Kalianpur 1975 / India zone III +<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 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.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> +# Kalianpur 1975 / India zone IV +<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 no_defs <> +# Kertau / 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 no_defs <> +# Kertau / UTM zone 47N +<24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> +# Kertau / 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 no_defs <> +# Kertau / R.S.O. Malaya (ch) +<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 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 +units=m +no_defs no_defs <> +# La Canoa / UTM zone 18N +<24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> +# La Canoa / UTM zone 19N +<24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> +# 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 no_defs <> +# PSAD56 / UTM zone 18N +<24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 19N +<24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 20N +<24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 21N +<24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 17S +<24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 18S +<24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 19S +<24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 20S +<24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / UTM zone 22S +<24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / Peru west zone +<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.999830 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / Peru central zone +<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.999330 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs no_defs <> +# PSAD56 / Peru east zone +<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.999530 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs no_defs <> +# Leigon / Ghana Metre Grid +<25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs no_defs <> +# Lome / UTM zone 31N +<25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# Luzon 1911 / Philippines zone I +<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# Luzon 1911 / Philippines zone II +<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# Luzon 1911 / Philippines zone III +<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# Luzon 1911 / Philippines zone IV +<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# Luzon 1911 / Philippines zone V +<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> +# Makassar (Jakarta) / NEIEZ +<25700> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +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 no_defs <> +# ETRS89 / UTM zone 28N +<25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 29N +<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 30N +<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 31N +<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 32N +<25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 33N +<25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 34N +<25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 35N +<25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 36N +<25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 37N +<25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / UTM zone 38N +<25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs no_defs <> +# ETRS89 / TM Baltic93 +<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# Malongo 1987 / UTM zone 32S +<25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs 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 no_defs <> +# Merchich / Sud Maroc +<26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> +# Merchich / Sahara +<26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> +# Massawa / UTM zone 37N +<26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs no_defs <> +# Minna / UTM zone 31N +<26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> +# Minna / UTM zone 32N +<26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> +# Minna / Nigeria West Belt +<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.999750 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> +# Minna / Nigeria Mid Belt +<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.999750 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> +# Minna / Nigeria East Belt +<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.999750 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> +# Mhast / UTM zone 32S +<26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs no_defs <> +# Monte Mario (Rome) / Italy zone 1 +<26591> +proj=tmerc +lat_0=0 +lon_0=21.45233333333333 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> +# Monte Mario (Rome) / Italy zone 2 +<26592> +proj=tmerc +lat_0=0 +lon_0=27.45233333333333 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> +# M'poraloko / UTM zone 32N +<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# M'poraloko / UTM zone 32S +<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 3N +<26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 4N +<26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 5N +<26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 6N +<26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 7N +<26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 8N +<26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 9N +<26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 10N +<26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 11N +<26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 12N +<26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 13N +<26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 14N +<26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 15N +<26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 16N +<26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 17N +<26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 18N +<26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 19N +<26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 20N +<26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 21N +<26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / UTM zone 22N +<26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / Alabama East +<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alabama West +<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 2 +<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 3 +<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 4 +<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 5 +<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 6 +<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 7 +<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 8 +<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Alaska zone 9 +<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / California zone VII +<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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Arizona East +<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Arizona Central +<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Arizona West +<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Florida East +<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Florida West +<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Georgia East +<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Georgia West +<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Idaho East +<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Idaho Central +<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Idaho West +<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Illinois East +<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Illinois West +<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Indiana East +<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Indiana West +<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Maine East +<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Maine West +<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Mississippi East +<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Mississippi West +<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Missouri East +<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Missouri Central +<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Missouri West +<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD Michigan / Michigan East +<26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999943 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD Michigan / Michigan Old Central +<26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD Michigan / Michigan West +<26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD Michigan / Michigan Central +<26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> +# 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD83 / UTM zone 3N +<26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 4N +<26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 5N +<26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 6N +<26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 7N +<26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 8N +<26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 9N +<26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 10N +<26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 11N +<26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 12N +<26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 13N +<26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 14N +<26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 15N +<26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 16N +<26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 17N +<26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 18N +<26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 19N +<26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 20N +<26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 21N +<26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 22N +<26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / UTM zone 23N +<26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alabama East +<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alabama West +<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 no_defs <> +# NAD83 / Alaska zone 2 +<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 3 +<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 4 +<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 5 +<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 6 +<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 7 +<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 8 +<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Alaska zone 9 +<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 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 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 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 no_defs <> +# NAD83 / Arizona East +<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Arizona Central +<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Arizona West +<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 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 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 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 no_defs <> +# NAD83 / Florida East +<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Florida West +<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 no_defs <> +# NAD83 / Hawaii zone 1 +<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Hawaii zone 2 +<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Hawaii zone 3 +<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Hawaii zone 4 +<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Hawaii zone 5 +<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Georgia East +<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Georgia West +<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Idaho East +<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Idaho Central +<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Idaho West +<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Illinois East +<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Illinois West +<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Indiana East +<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Indiana West +<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 no_defs <> +# NAD83 / Kentucky North +<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 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 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 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 no_defs <> +# NAD83 / Maine East +<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Maine West +<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 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 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 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 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 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 no_defs <> +# NAD83 / Mississippi East +<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Mississippi West +<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Missouri East +<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Missouri Central +<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Missouri West +<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# Nahrwan 1967 / UTM zone 38N +<27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> +# Nahrwan 1967 / UTM zone 39N +<27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> +# Nahrwan 1967 / UTM zone 40N +<27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> +# Naparima 1972 / UTM zone 20N +<27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / New Zealand Map Grid +<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Mount Eden Circuit +<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.999900 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Bay of Plenty Circuit +<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Poverty Bay Circuit +<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Hawkes Bay Circuit +<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Taranaki Circuit +<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Tuhirangi Circuit +<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Wanganui Circuit +<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Wairarapa Circuit +<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Wellington Circuit +<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Collingwood Circuit +<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Nelson Circuit +<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Karamea Circuit +<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Buller Circuit +<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Grey Circuit +<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Amuri Circuit +<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Marlborough Circuit +<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Hokitika Circuit +<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Okarito Circuit +<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Jacksons Bay Circuit +<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Mount Pleasant Circuit +<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Gawler Circuit +<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Timaru Circuit +<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Lindis Peak Circuit +<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Mount Nicholas Circuit +<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Mount York Circuit +<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Observation Point Circuit +<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / North Taieri Circuit +<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.999960 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / Bluff Circuit +<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1.000000 +x_0=300002.66 +y_0=699999.58 +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / UTM zone 58S +<27258> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / UTM zone 59S +<27259> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / UTM zone 60S +<27260> +proj=utm +zone=60 +south +ellps=intl +units=m +no_defs no_defs <> +# NZGD49 / North Island Grid +<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1.000000 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> +# NZGD49 / South Island Grid +<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1.000000 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> +# NGO 1948 (Oslo) / NGO zone I +<27391> +proj=tmerc +lat_0=58 +lon_0=6.056250000000003 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone II +<27392> +proj=tmerc +lat_0=58 +lon_0=8.389583333333336 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone III +<27393> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone IV +<27394> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone V +<27395> +proj=tmerc +lat_0=58 +lon_0=16.88958333333334 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone VI +<27396> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone VII +<27397> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +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 no_defs <> +# NGO 1948 (Oslo) / NGO zone VIII +<27398> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +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 no_defs <> +# Datum 73 / UTM zone 29N +<27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> +# Datum 73 / Modified Portuguese Grid +<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs no_defs <> +# ATF (Paris) / Nord de Guerre +<27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=7.737229170000001 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / Lambert Nord France +<27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +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 no_defs <> +# NTF (Paris) / Lambert Centre France +<27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +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 no_defs <> +# NTF (Paris) / Lambert Sud France +<27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +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 no_defs <> +# NTF (Paris) / Lambert Corse +<27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +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 no_defs <> +# NTF (Paris) / Lambert zone I +<27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / Lambert zone II +<27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / Lambert zone III +<27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / Lambert zone IV +<27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / France I +<27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / France II +<27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / France III +<27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / France IV +<27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> +# NTF (Paris) / Nord France +<27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +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 no_defs <> +# NTF (Paris) / Centre France +<27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +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 no_defs <> +# NTF (Paris) / Sud France +<27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +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 no_defs <> +# NTF (Paris) / Corse +<27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +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 no_defs <> +# OSGB 1936 / British National Grid +<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs 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 +units=m +no_defs no_defs <> +# Palestine 1923 / Palestine Belt +<28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1.000000 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> +# 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 +units=m +no_defs no_defs <> +# Pointe Noire / UTM zone 32S +<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 48 +<28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 no_defs <> +# GDA94 / MGA zone 50 +<28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 51 +<28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 52 +<28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 53 +<28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 54 +<28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 55 +<28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 56 +<28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 57 +<28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# GDA94 / MGA zone 58 +<28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 2 +<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 3 +<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 4 +<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 5 +<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 6 +<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 7 +<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 8 +<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 9 +<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 10 +<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 11 +<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 12 +<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 13 +<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 14 +<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 15 +<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 16 +<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 17 +<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 18 +<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 19 +<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 20 +<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 21 +<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 22 +<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 23 +<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 24 +<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 25 +<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 26 +<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 27 +<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 28 +<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 29 +<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 30 +<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 31 +<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger zone 32 +<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 2N +<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 3N +<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 4N +<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 5N +<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 6N +<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 7N +<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 8N +<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 9N +<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 10N +<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 11N +<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 12N +<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 13N +<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 14N +<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 15N +<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 16N +<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 17N +<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 18N +<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 19N +<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 20N +<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 21N +<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 22N +<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 23N +<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 24N +<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 25N +<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 26N +<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 27N +<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 28N +<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 29N +<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 30N +<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 31N +<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Pulkovo 1942 / Gauss-Kruger 32N +<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> +# Qatar 1974 / Qatar National Grid +<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs no_defs <> +# Amersfoort / RD Old +<28991> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Amersfoort / RD New +<28992> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs no_defs <> +# SAD69 / Brazil Polyconic +<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 18N +<29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 19N +<29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 20N +<29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 21N +<29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 22N +<29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 17S +<29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 18S +<29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 19S +<29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 20S +<29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 21S +<29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 22S +<29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 23S +<29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 24S +<29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs no_defs <> +# SAD69 / UTM zone 25S +<29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs 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 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 no_defs <> +# Schwarzeck / UTM zone 33S +<29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs no_defs <> +# South West African Coord. System zone 11 +# South West African Coord. System zone 13 +# South West African Coord. System zone 15 +# South West African Coord. System zone 17 +# South West African Coord. System zone 19 +# South West African Coord. System zone 21 +# South West African Coord. System zone 23 +# South West African Coord. System zone 25 +# Sudan / UTM zone 35N +<29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# Sudan / UTM zone 36N +<29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# Tananarive (Paris) / Laborde Grid +<29700> +proj=omerc +lat_0=-18.9 +lonc=46.43722917000001 +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 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 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 no_defs <> +# Timbalai 1948 / UTM zone 49N +<29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs no_defs <> +# Timbalai 1948 / UTM zone 50N +<29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs no_defs <> +# Timbalai 1948 / R.S.O. 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 no_defs <> +# Timbalai 1948 / R.S.O. 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 no_defs <> +# Timbalai 1948 / R.S.O. 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 no_defs <> +# TM65 / Irish National Grid +<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> +# OSNI 1952 / Irish National Grid +<29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000000 +x_0=200000 +y_0=250000 +ellps=airy +units=m +no_defs no_defs <> +# TM65 / Irish Grid +<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> +# TM75 / Irish Grid +<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS I +<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS II +<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS III +<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS IV +<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS V +<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS VI +<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS VII +<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS VIII +<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS IX +<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS X +<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XI +<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XII +<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XIII +<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XIV +<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XV +<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XVI +<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XVII +<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XVIII +<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Tokyo / Japan Plane Rectangular CS XIX +<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Trinidad 1903 / Trinidad Grid +<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380700001 +y_0=65379.0133425 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.2011661949 +no_defs no_defs <> +# TC(1948) / UTM zone 39N +<30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs no_defs <> +# TC(1948) / UTM zone 40N +<30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs no_defs <> +# Voirol 1875 / Nord Algerie (ancienne) +<30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> +# Voirol 1875 / Sud Algerie (ancienne) +<30492> +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 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> +# Nord Sahara 1959 / UTM zone 29N +<30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs no_defs <> +# Nord Sahara 1959 / UTM zone 30N +<30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs no_defs <> +# Nord Sahara 1959 / UTM zone 31N +<30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> +# Nord Sahara 1959 / UTM zone 32N +<30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs 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 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 no_defs <> +# RT38 2.5 gon W +<30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# Yoff / UTM zone 28N +<31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> +# Zanderij / UTM zone 21N +<31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> +# Zanderij / TM 54 NW +<31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> +# Zanderij / Suriname Old TM +<31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> +# Zanderij / Suriname TM +<31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999900 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> +# MGI / 3-degree Gauss zone 5 +<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / 3-degree Gauss zone 6 +<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / 3-degree Gauss zone 7 +<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / 3-degree Gauss zone 8 +<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / Balkans zone 5 +<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / Balkans zone 6 +<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999900 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / Balkans zone 7 +<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / Balkans zone 8 +<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / Balkans zone 8 +<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999900 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI (Ferro) / Austria West Zone +<31281> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# MGI (Ferro) / Austria Central Zone +<31282> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# MGI (Ferro) / Austria East Zone +<31283> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# MGI / M28 +<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / M31 +<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / M34 +<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs 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 +units=m +no_defs no_defs <> +# MGI (Ferro) / Austria West Zone +<31291> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# MGI (Ferro) / Austria Central Zone +<31292> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# MGI (Ferro) / Austria East Zone +<31293> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> +# MGI / M28 +<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / M31 +<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / M34 +<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# MGI / Austria Lambert +<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 +units=m +no_defs 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 +units=m +no_defs 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 +units=m +no_defs no_defs <> +# DHDN / 3-degree Gauss zone 1 +<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / 3-degree Gauss zone 2 +<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / 3-degree Gauss zone 3 +<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / 3-degree Gauss zone 4 +<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / 3-degree Gauss zone 5 +<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / Gauss-Kruger zone 2 +<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / Gauss-Kruger zone 3 +<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / Gauss-Kruger zone 4 +<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# DHDN / Gauss-Kruger zone 5 +<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs 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 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 no_defs <> +# Dealul Piscului 1933/ Stereo 33 +<31600> +proj=stere +lat_0=45.9 +lon_0=25.39246588888889 +k=0.999667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs no_defs <> +# Dealul Piscului 1970/ Stereo 70 +<31700> +proj=stere +lat_0=46 +lon_0=25 +k=0.999750 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs no_defs <> +# NGN / UTM zone 38N +<31838> +proj=utm +zone=38 +ellps=WGS84 +units=m +no_defs no_defs <> +# NGN / UTM zone 39N +<31839> +proj=utm +zone=39 +ellps=WGS84 +units=m +no_defs no_defs <> +# KUDAMS / KTM +<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 17N +<31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 18N +<31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 19N +<31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 20N +<31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 21N +<31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 22N +<31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 17S +<31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 18S +<31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 19S +<31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 20S +<31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 21S +<31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 22S +<31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 23S +<31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 24S +<31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> +# SIRGAS / UTM zone 25S +<32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Nevada East +<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Nevada Central +<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Nevada West +<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New Hampshire +<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New Jersey +<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.999975 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New Mexico East +<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New Mexico Central +<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New Mexico West +<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New York East +<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New York Central +<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / New York West +<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Rhode Island +<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Tennessee +<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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Vermont +<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs 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 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Wyoming East +<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Wyoming East Central +<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Wyoming West Central +<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / Wyoming West +<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs 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 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 no_defs <> +# NAD27 / BLM 14N (ftUS) +<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 15N (ftUS) +<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 16N (ftUS) +<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 17N (ftUS) +<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 14N (feet) +<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 15N (feet) +<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 16N (feet) +<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / BLM 17N (feet) +<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / MTM zone 1 +<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / MTM zone 2 +<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / MTM zone 3 +<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / MTM zone 4 +<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / MTM zone 5 +<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# NAD27 / MTM zone 6 +<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs 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 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 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 no_defs <> +# NAD83 / Nevada East +<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Nevada Central +<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Nevada West +<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New Hampshire +<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New Jersey +<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New Mexico East +<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New Mexico Central +<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New Mexico West +<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New York East +<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New York Central +<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / New York West +<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 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 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 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 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 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 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 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 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 no_defs <> +# NAD83 / Rhode Island +<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 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 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 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 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 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 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 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 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 no_defs <> +# NAD83 / Vermont +<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 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 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 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 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 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 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 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 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 no_defs <> +# NAD83 / Wyoming East +<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Wyoming East Central +<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Wyoming West Central +<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Wyoming West +<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 no_defs <> +# NAD83 / SCoPQ zone 2 +<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 1 +<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 2 +<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 3 +<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 4 +<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 5 +<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 6 +<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 7 +<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 8 +<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 9 +<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 10 +<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 11 +<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 12 +<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 13 +<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 14 +<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 15 +<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 16 +<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 17 +<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs 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 no_defs <> +# WGS 72 / UTM zone 1N +<32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 2N +<32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 3N +<32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 4N +<32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 5N +<32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 6N +<32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 7N +<32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 8N +<32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 9N +<32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 10N +<32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 11N +<32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 12N +<32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 13N +<32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 14N +<32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 15N +<32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 16N +<32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 17N +<32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 18N +<32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 19N +<32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 20N +<32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 21N +<32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 22N +<32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 23N +<32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 24N +<32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 25N +<32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 26N +<32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 27N +<32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 28N +<32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 29N +<32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 30N +<32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 31N +<32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 32N +<32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 33N +<32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 34N +<32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 35N +<32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 36N +<32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 37N +<32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 38N +<32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 39N +<32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 40N +<32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 41N +<32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 42N +<32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 43N +<32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 44N +<32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 45N +<32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 46N +<32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 47N +<32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 48N +<32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 49N +<32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 50N +<32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 51N +<32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 52N +<32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 53N +<32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 54N +<32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 55N +<32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 56N +<32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 57N +<32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 58N +<32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 59N +<32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 60N +<32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 1S +<32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 2S +<32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 3S +<32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 4S +<32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 5S +<32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 6S +<32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 7S +<32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 8S +<32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 9S +<32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 10S +<32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 11S +<32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 12S +<32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 13S +<32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 14S +<32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 15S +<32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 16S +<32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 17S +<32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 18S +<32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 19S +<32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 20S +<32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 21S +<32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 22S +<32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 23S +<32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 24S +<32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 25S +<32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 26S +<32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 27S +<32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 28S +<32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 29S +<32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 30S +<32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 31S +<32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 32S +<32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 33S +<32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 34S +<32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 35S +<32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 36S +<32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 37S +<32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 38S +<32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 39S +<32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 40S +<32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 41S +<32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 42S +<32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 43S +<32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 44S +<32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 45S +<32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 46S +<32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 47S +<32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 48S +<32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 49S +<32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 50S +<32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 51S +<32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 52S +<32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 53S +<32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 54S +<32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 55S +<32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 56S +<32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 57S +<32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 58S +<32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 59S +<32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs no_defs <> +# WGS 72 / UTM zone 60S +<32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs 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 no_defs <> +# WGS 72BE / UTM zone 2N +<32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 3N +<32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 4N +<32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 5N +<32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 6N +<32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 7N +<32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 8N +<32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 9N +<32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 10N +<32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 11N +<32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 12N +<32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 13N +<32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 14N +<32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 15N +<32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 16N +<32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 17N +<32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 18N +<32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 19N +<32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 20N +<32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 21N +<32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 22N +<32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 23N +<32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 24N +<32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 25N +<32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 26N +<32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 27N +<32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 28N +<32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 29N +<32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 30N +<32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 31N +<32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 32N +<32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 33N +<32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 34N +<32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 35N +<32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 36N +<32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 37N +<32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 38N +<32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 39N +<32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 40N +<32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 41N +<32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 42N +<32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 43N +<32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 44N +<32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 45N +<32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 46N +<32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 47N +<32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 48N +<32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 49N +<32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 50N +<32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 51N +<32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 52N +<32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 53N +<32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 54N +<32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 55N +<32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 56N +<32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 57N +<32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 58N +<32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 59N +<32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 60N +<32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 1S +<32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 2S +<32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 3S +<32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 4S +<32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 5S +<32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 6S +<32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 7S +<32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 8S +<32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 9S +<32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 10S +<32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 11S +<32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 12S +<32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 13S +<32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 14S +<32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 15S +<32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 16S +<32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 17S +<32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 18S +<32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 19S +<32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 20S +<32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 21S +<32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 22S +<32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 23S +<32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 24S +<32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 25S +<32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 26S +<32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 27S +<32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 28S +<32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 29S +<32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 30S +<32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 31S +<32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 32S +<32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 33S +<32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 34S +<32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 35S +<32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 36S +<32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 37S +<32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 38S +<32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 39S +<32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 40S +<32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 41S +<32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 42S +<32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 43S +<32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 44S +<32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 45S +<32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 46S +<32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 47S +<32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 48S +<32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 49S +<32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 50S +<32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 51S +<32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 52S +<32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 53S +<32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 54S +<32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 55S +<32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 56S +<32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 57S +<32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 58S +<32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 59S +<32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 72BE / UTM zone 60S +<32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 1N +<32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 2N +<32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 3N +<32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 4N +<32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 5N +<32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 6N +<32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 7N +<32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 8N +<32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 9N +<32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 10N +<32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 11N +<32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 12N +<32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 13N +<32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 14N +<32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 15N +<32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 16N +<32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 17N +<32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 18N +<32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 19N +<32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 20N +<32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 21N +<32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 22N +<32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 23N +<32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 24N +<32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 25N +<32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 26N +<32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 27N +<32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 28N +<32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 29N +<32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 30N +<32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 31N +<32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 32N +<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 33N +<32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 34N +<32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 35N +<32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 36N +<32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 37N +<32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 38N +<32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 39N +<32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 40N +<32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 41N +<32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 42N +<32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 43N +<32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 44N +<32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 45N +<32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 46N +<32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 47N +<32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 48N +<32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 49N +<32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 50N +<32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 51N +<32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 52N +<32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 53N +<32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 54N +<32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 55N +<32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 56N +<32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 57N +<32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 58N +<32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 59N +<32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 60N +<32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs 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 no_defs <> +# WGS 84 / UTM zone 1S +<32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 2S +<32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 3S +<32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 4S +<32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 5S +<32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 6S +<32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 7S +<32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 8S +<32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 9S +<32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 10S +<32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 11S +<32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 12S +<32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 13S +<32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 14S +<32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 15S +<32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 16S +<32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 17S +<32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 18S +<32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 19S +<32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 20S +<32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 21S +<32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 22S +<32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 23S +<32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 24S +<32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 25S +<32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 26S +<32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 27S +<32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 28S +<32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 29S +<32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 30S +<32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 31S +<32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 32S +<32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 33S +<32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 34S +<32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 35S +<32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 36S +<32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 37S +<32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 38S +<32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 39S +<32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 40S +<32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 41S +<32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 42S +<32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 43S +<32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 44S +<32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 45S +<32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 46S +<32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 47S +<32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 48S +<32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 49S +<32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 50S +<32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 51S +<32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 52S +<32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 53S +<32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 54S +<32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 55S +<32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 56S +<32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 57S +<32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 58S +<32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 59S +<32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS 84 / UTM zone 60S +<32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs 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 no_defs <> +# WGS 84 / TM 36 SE +<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# Pulkovo 1995 GK Zone 2 +<20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <> +# Pulkovo 1995 GK Zone 3 +<20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <> +# Pulkovo 1995 GK Zone 2N +<20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> +# Pulkovo 1995 GK Zone 3N +<20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> +# La Canoa UTM Zone 21N +<24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <> +# NAD 1927 StatePlane Hawaii 1 FIPS 5101 +<26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 2 FIPS 5102 +<26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 3 FIPS 5103 +<26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 4 FIPS 5104 +<26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 5 FIPS 5105 +<26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Michigan North FIPS 2111 +<26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Michigan Central FIPS 2112 +<26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Michigan South FIPS 2113 +<26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# Nord Algerie +<30591> +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 <> +# Sud Algerie +<30592> +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 <> +# Germany Zone 1 +<31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 2 +<31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 3 +<31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 4 +<31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 5 +<31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# NAD 1927 StatePlane Puerto Rico FIPS 5201 +<32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202 +<32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# Sphere Plate Carree +<53001> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Equidistant Cylindrical +<53002> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Miller Cylindrical +<53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Mercator +<53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Sinusoidal +<53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Mollweide +<53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert VI +<53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert V +<53011> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert IV +<53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert III +<53013> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert II +<53014> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert I +<53015> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Gall Stereographic +<53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Behrmann +<53017> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Winkel I +<53018> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Winkel II +<53019> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Polyconic +<53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Quartic Authalic +<53022> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Loximuthal +<53023> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Bonne +<53024> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Hotine +<53025> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Stereographic +<53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Equidistant Conic +<53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Cassini +<53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Van der Grinten I +<53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Robinson +<53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Two Point Equidistant +<53031> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Azimuthal Equidistant +<53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# World Plate Carree +<54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Equidistant Cylindrical +<54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Miller Cylindrical +<54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Mercator +<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Sinusoidal +<54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Mollweide +<54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert VI +<54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert V +<54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert IV +<54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert III +<54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert II +<54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert I +<54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Gall Stereographic +<54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Behrmann +<54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Winkel I +<54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Winkel II +<54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Polyconic +<54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Quartic Authalic +<54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Loximuthal +<54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Bonne +<54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Hotine +<54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Stereographic +<54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Equidistant Conic +<54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Cassini +<54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Van der Grinten I +<54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Robinson +<54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Two Point Equidistant +<54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Azimuthal Equidistant +<54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# NAD 1927 StatePlane Guam FIPS 5400 +<65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Guam FIPS 5400 +<65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Canada Albers Equal Area Conic +<102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Canada Lambert Conformal Conic +<102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# USA Contiguous Albers Equal Area Conic +<102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# USA Contiguous Lambert Conformal Conic +<102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# USA Contiguous Equidistant Conic +<102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Alaska Albers Equal Area Conic +<102006> +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 <> +# Hawaii Albers Equal Area Conic +<102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# North America Albers Equal Area Conic +<102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# North America Lambert Conformal Conic +<102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# North America Equidistant Conic +<102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Africa Sinusoidal +<102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia Lambert Conformal Conic +<102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Europe Albers Equal Area Conic +<102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# Europe Lambert Conformal Conic +<102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# South America Lambert Conformal Conic +<102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> +# North Pole Azimuthal Equidistant +<102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# North Pole Lambert Azimuthal Equal Area +<102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# North Pole Stereographic +<102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# South Pole Azimuthal Equidistant +<102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# South Pole Lambert Azimuthal Equal Area +<102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# South Pole Stereographic +<102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Africa Albers Equal Area Conic +<102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Africa Equidistant Conic +<102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Africa Lambert Conformal Conic +<102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia North Albers Equal Area Conic +<102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia North Equidistant Conic +<102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia North Lambert Conformal Conic +<102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia South Albers Equal Area Conic +<102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia South Equidistant Conic +<102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia South Lambert Conformal Conic +<102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Europe Equidistant Conic +<102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# South America Equidistant Conic +<102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> +# South America Albers Equal Area Conic +<102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> +# S-JTSK Krovak +<102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> +# S-JTSK Ferro Krovak East North +<102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <> +# S-JTSK Krovak East North +<102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> +# Monte Mario Italy 1 +<102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <> +# Monte Mario Italy 2 +<102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <> +# NGO 1948 Norway Zone 1 +<102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 2 +<102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 3 +<102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 4 +<102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 5 +<102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 6 +<102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 7 +<102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 8 +<102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# RGF 1993 Lambert 93 +<102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <> +# Old Hawaiian UTM Zone 4N +<102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <> +# Old Hawaiian UTM Zone 5N +<102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <> +# NAD 1927 Michigan GeoRef Feet US +<102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 Michigan GeoRef Feet US +<102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 Michigan GeoRef Meters +<102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <> +# NAD 1983 Michigan GeoRef Meters +<102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# NGO 1948 UTM Zone 32N +<102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 UTM Zone 33N +<102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 UTM Zone 34N +<102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 UTM Zone 35N +<102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# Hong Kong 1980 Grid +<102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <> +# Hong Kong 1980 UTM Zone 49N +<102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <> +# Hong Kong 1980 UTM Zone 50N +<102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <> +# Tokyo UTM Zone 51N +<102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 52N +<102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 53N +<102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 54N +<102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 55N +<102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 56N +<102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <> +# Datum 73 Hayford Gauss IGeoE +<102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <> +# Datum 73 Hayford Gauss IPCC +<102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <> +# Graciosa Base SW 1948 UTM Zone 26N +<102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> +# Lisboa Bessel Bonne +<102163> +ellps=bessel +units=m no_defs <> +# Lisboa Hayford Gauss IGeoE +<102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <> +# Lisboa Hayford Gauss IPCC +<102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# Observ Meteorologico 1939 UTM Zone 25N +<102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <> +# Porto Santo 1936 UTM Zone 28N +<102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> +# Sao Braz UTM Zone 26N +<102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> +# Selvagem Grande 1938 UTM Zone 28N +<102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> +# Nord Maroc Degree +<102191> +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=6356514.999904194 +units=m no_defs <> +# Sud Maroc Degree +<102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# Sahara Degree +<102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NAD 1983 HARN StatePlane Alabama East FIPS 0101 +<102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Alabama West FIPS 0102 +<102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California I FIPS 0401 +<102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California II FIPS 0402 +<102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California III FIPS 0403 +<102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California IV FIPS 0404 +<102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California V FIPS 0405 +<102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California VI FIPS 0406 +<102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arizona East FIPS 0201 +<102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arizona Central FIPS 0202 +<102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arizona West FIPS 0203 +<102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arkansas North FIPS 0301 +<102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arkansas South FIPS 0302 +<102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Colorado North FIPS 0501 +<102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Colorado Central FIPS 0502 +<102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Colorado South FIPS 0503 +<102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Connecticut FIPS 0600 +<102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Delaware FIPS 0700 +<102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Florida East FIPS 0901 +<102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Florida West FIPS 0902 +<102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Florida North FIPS 0903 +<102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101 +<102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102 +<102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103 +<102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104 +<102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105 +<102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Georgia East FIPS 1001 +<102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Georgia West FIPS 1002 +<102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Idaho East FIPS 1101 +<102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Idaho Central FIPS 1102 +<102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Idaho West FIPS 1103 +<102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Illinois East FIPS 1201 +<102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Illinois West FIPS 1202 +<102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Indiana East FIPS 1301 +<102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Indiana West FIPS 1302 +<102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Kansas North FIPS 1501 +<102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Kansas South FIPS 1502 +<102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Kentucky North FIPS 1601 +<102279> +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 <> +# NAD 1983 HARN StatePlane Kentucky South FIPS 1602 +<102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Louisiana North FIPS 1701 +<102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Louisiana South FIPS 1702 +<102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Maine East FIPS 1801 +<102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Maine West FIPS 1802 +<102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Maryland FIPS 1900 +<102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001 +<102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002 +<102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Michigan North FIPS 2111 +<102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Michigan Central FIPS 2112 +<102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Michigan South FIPS 2113 +<102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Minnesota North FIPS 2201 +<102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Minnesota Central FIPS 2202 +<102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Minnesota South FIPS 2203 +<102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Mississippi East FIPS 2301 +<102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Mississippi West FIPS 2302 +<102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Missouri East FIPS 2401 +<102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Missouri Central FIPS 2402 +<102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Missouri West FIPS 2403 +<102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Montana FIPS 2500 +<102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nebraska FIPS 2600 +<102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nevada East FIPS 2701 +<102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nevada Central FIPS 2702 +<102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nevada West FIPS 2703 +<102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Hampshire FIPS 2800 +<102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Jersey FIPS 2900 +<102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Mexico East FIPS 3001 +<102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Mexico Central FIPS 3002 +<102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Mexico West FIPS 3003 +<102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York East FIPS 3101 +<102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York Central FIPS 3102 +<102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York West FIPS 3103 +<102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York Long Island FIPS 3104 +<102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane North Dakota North FIPS 3301 +<102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane North Dakota South FIPS 3302 +<102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Ohio North FIPS 3401 +<102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Ohio South FIPS 3402 +<102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oklahoma North FIPS 3501 +<102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oklahoma South FIPS 3502 +<102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oregon North FIPS 3601 +<102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oregon South FIPS 3602 +<102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Rhode Island FIPS 3800 +<102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane South Dakota North FIPS 4001 +<102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane South Dakota South FIPS 4002 +<102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Tennessee FIPS 4100 +<102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas North FIPS 4201 +<102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas North Central FIPS 4202 +<102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas Central FIPS 4203 +<102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas South Central FIPS 4204 +<102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas South FIPS 4205 +<102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Utah North FIPS 4301 +<102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Utah Central FIPS 4302 +<102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Utah South FIPS 4303 +<102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Vermont FIPS 4400 +<102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Virginia North FIPS 4501 +<102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Virginia South FIPS 4502 +<102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Washington North FIPS 4601 +<102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Washington South FIPS 4602 +<102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane West Virginia North FIPS 4701 +<102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane West Virginia South FIPS 4702 +<102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wisconsin North FIPS 4801 +<102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802 +<102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wisconsin South FIPS 4803 +<102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming East FIPS 4901 +<102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902 +<102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903 +<102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming West FIPS 4904 +<102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200 +<102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <> +# Nord Algerie Ancienne Degree +<102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# Sud Algerie Ancienne Degree +<102492> +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=6356514.999904194 +units=m no_defs <> +# NTF France I degrees +<102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NTF France II degrees +<102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NTF France III degrees +<102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NTF France IV degrees +<102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# Nord Algerie Degree +<102591> +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 <> +# Sud Algerie Degree +<102592> +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 <> +# NAD 1983 StatePlane Alabama East FIPS 0101 Feet +<102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alabama West FIPS 0102 Feet +<102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet +<102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet +<102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet +<102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet +<102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet +<102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet +<102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet +<102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet +<102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet +<102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet +<102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California I FIPS 0401 Feet +<102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California II FIPS 0402 Feet +<102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California III FIPS 0403 Feet +<102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California IV FIPS 0404 Feet +<102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California V FIPS 0405 Feet +<102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California VI FIPS 0406 Feet +<102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arizona East FIPS 0201 Feet +<102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arizona Central FIPS 0202 Feet +<102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arizona West FIPS 0203 Feet +<102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arkansas North FIPS 0301 Feet +<102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arkansas South FIPS 0302 Feet +<102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Colorado North FIPS 0501 Feet +<102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Colorado Central FIPS 0502 Feet +<102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Colorado South FIPS 0503 Feet +<102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Connecticut FIPS 0600 Feet +<102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Delaware FIPS 0700 Feet +<102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Florida East FIPS 0901 Feet +<102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Florida West FIPS 0902 Feet +<102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Florida North FIPS 0903 Feet +<102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet +<102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet +<102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet +<102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet +<102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet +<102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Georgia East FIPS 1001 Feet +<102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Georgia West FIPS 1002 Feet +<102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Idaho East FIPS 1101 Feet +<102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Idaho Central FIPS 1102 Feet +<102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Idaho West FIPS 1103 Feet +<102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Illinois East FIPS 1201 Feet +<102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Illinois West FIPS 1202 Feet +<102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Indiana East FIPS 1301 Feet +<102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Indiana West FIPS 1302 Feet +<102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Iowa North FIPS 1401 Feet +<102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Iowa South FIPS 1402 Feet +<102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kansas North FIPS 1501 Feet +<102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kansas South FIPS 1502 Feet +<102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kentucky North FIPS 1601 Feet +<102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kentucky South FIPS 1602 Feet +<102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Louisiana North FIPS 1701 Feet +<102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Louisiana South FIPS 1702 Feet +<102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Maine East FIPS 1801 Feet +<102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Maine West FIPS 1802 Feet +<102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Maryland FIPS 1900 Feet +<102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet +<102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet +<102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Michigan North FIPS 2111 Feet +<102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Michigan Central FIPS 2112 Feet +<102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Michigan South FIPS 2113 Feet +<102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Minnesota North FIPS 2201 Feet +<102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet +<102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Minnesota South FIPS 2203 Feet +<102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Mississippi East FIPS 2301 Feet +<102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Mississippi West FIPS 2302 Feet +<102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Missouri East FIPS 2401 Feet +<102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Missouri Central FIPS 2402 Feet +<102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Missouri West FIPS 2403 Feet +<102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Montana FIPS 2500 Feet +<102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nebraska FIPS 2600 Feet +<102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nevada East FIPS 2701 Feet +<102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nevada Central FIPS 2702 Feet +<102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nevada West FIPS 2703 Feet +<102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Hampshire FIPS 2800 Feet +<102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Jersey FIPS 2900 Feet +<102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Mexico East FIPS 3001 Feet +<102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet +<102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Mexico West FIPS 3003 Feet +<102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York East FIPS 3101 Feet +<102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York Central FIPS 3102 Feet +<102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York West FIPS 3103 Feet +<102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York Long Island FIPS 3104 Feet +<102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane North Carolina FIPS 3200 Feet +<102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane North Dakota North FIPS 3301 Feet +<102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane North Dakota South FIPS 3302 Feet +<102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Ohio North FIPS 3401 Feet +<102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Ohio South FIPS 3402 Feet +<102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet +<102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet +<102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oregon North FIPS 3601 Feet +<102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oregon South FIPS 3602 Feet +<102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet +<102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet +<102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Rhode Island FIPS 3800 Feet +<102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane South Carolina FIPS 3900 Feet +<102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane South Dakota North FIPS 4001 Feet +<102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane South Dakota South FIPS 4002 Feet +<102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Tennessee FIPS 4100 Feet +<102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas North FIPS 4201 Feet +<102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas North Central FIPS 4202 Feet +<102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas Central FIPS 4203 Feet +<102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas South Central FIPS 4204 Feet +<102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas South FIPS 4205 Feet +<102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Utah North FIPS 4301 Feet +<102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Utah Central FIPS 4302 Feet +<102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Utah South FIPS 4303 Feet +<102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Vermont FIPS 4400 Feet +<102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Virginia North FIPS 4501 Feet +<102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Virginia South FIPS 4502 Feet +<102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Washington North FIPS 4601 Feet +<102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Washington South FIPS 4602 Feet +<102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane West Virginia North FIPS 4701 Feet +<102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane West Virginia South FIPS 4702 Feet +<102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet +<102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet +<102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet +<102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming East FIPS 4901 Feet +<102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet +<102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet +<102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming West FIPS 4904 Feet +<102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet +<102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Guam FIPS 5400 Feet +<102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# Belge Lambert 1972 +<103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <> +# GCS International 1967 +<4023> +proj=longlat +ellps=aust_SA no_defs <> +# GCS Bern 1898 +<4217> +proj=longlat +ellps=bessel no_defs <> +# GCS Voirol Unifie 1960 +<4305> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Montserrat 1958 +<4404> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Voirol Unifie 1960 Paris +<4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <> +# GCS WGS 1966 +<37001> +proj=longlat +ellps=WGS66 no_defs <> +# GCS Fischer 1960 +<37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <> +# GCS Fischer 1968 +<37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <> +# GCS Fischer Modified +<37004> +proj=longlat +ellps=fschr60m no_defs <> +# GCS Hough 1960 +<37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> +# GCS Everest Modified 1969 +<37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <> +# GCS Walbeck +<37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <> +# GCS Sphere ARC INFO +<37008> +proj=longlat +a=6370997 +b=6370997 no_defs <> +# GCS European 1979 +<37201> +proj=longlat +ellps=intl no_defs <> +# GCS Everest Bangladesh +<37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <> +# GCS Everest India Nepal +<37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <> +# GCS Hjorsey 1955 +<37204> +proj=longlat +ellps=intl no_defs <> +# GCS Hong Kong 1963 +<37205> +proj=longlat +ellps=intl no_defs <> +# GCS Oman +<37206> +proj=longlat +ellps=clrk80 no_defs <> +# GCS South Asia Singapore +<37207> +proj=longlat +ellps=fschr60m no_defs <> +# GCS Ayabelle +<37208> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Point 58 +<37211> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Beacon E 1945 +<37212> +proj=longlat +ellps=intl no_defs <> +# GCS Tern Island 1961 +<37213> +proj=longlat +ellps=intl no_defs <> +# GCS Astro 1952 +<37214> +proj=longlat +ellps=intl no_defs <> +# GCS Bellevue IGN +<37215> +proj=longlat +ellps=intl no_defs <> +# GCS Canton 1966 +<37216> +proj=longlat +ellps=intl no_defs <> +# GCS Chatham Island 1971 +<37217> +proj=longlat +ellps=intl no_defs <> +# GCS DOS 1968 +<37218> +proj=longlat +ellps=intl no_defs <> +# GCS Easter Island 1967 +<37219> +proj=longlat +ellps=intl no_defs <> +# GCS Guam 1963 +<37220> +proj=longlat +ellps=clrk66 no_defs <> +# GCS GUX 1 +<37221> +proj=longlat +ellps=intl no_defs <> +# GCS Johnston Island 1961 +<37222> +proj=longlat +ellps=intl no_defs <> +# GCS Carthage Degree +<37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> +# GCS Midway 1961 +<37224> +proj=longlat +ellps=intl no_defs <> +# GCS Pitcairn 1967 +<37226> +proj=longlat +ellps=intl no_defs <> +# GCS Santo DOS 1965 +<37227> +proj=longlat +ellps=intl no_defs <> +# GCS Viti Levu 1916 +<37228> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Wake Eniwetok 1960 +<37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> +# GCS Wake Island 1952 +<37230> +proj=longlat +ellps=intl no_defs <> +# GCS Anna 1 1965 +<37231> +proj=longlat +ellps=aust_SA no_defs <> +# GCS Gan 1970 +<37232> +proj=longlat +ellps=intl no_defs <> +# GCS ISTS 073 1969 +<37233> +proj=longlat +ellps=intl no_defs <> +# GCS Kerguelen Island 1949 +<37234> +proj=longlat +ellps=intl no_defs <> +# GCS Reunion +<37235> +proj=longlat +ellps=intl no_defs <> +# GCS Ascension Island 1958 +<37237> +proj=longlat +ellps=intl no_defs <> +# GCS DOS 71 4 +<37238> +proj=longlat +ellps=intl no_defs <> +# GCS Cape Canaveral +<37239> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Fort Thomas 1955 +<37240> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Graciosa Base SW 1948 +<37241> +proj=longlat +ellps=intl no_defs <> +# GCS ISTS 061 1968 +<37242> +proj=longlat +ellps=intl no_defs <> +# GCS LC5 1961 +<37243> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Observ Meteorologico 1939 +<37245> +proj=longlat +ellps=intl no_defs <> +# GCS Pico de Las Nieves +<37246> +proj=longlat +ellps=intl no_defs <> +# GCS Porto Santo 1936 +<37247> +proj=longlat +ellps=intl no_defs <> +# GCS Sao Braz +<37249> +proj=longlat +ellps=intl no_defs <> +# GCS Selvagem Grande 1938 +<37250> +proj=longlat +ellps=intl no_defs <> +# GCS Tristan 1968 +<37251> +proj=longlat +ellps=intl no_defs <> +# GCS Samoa 1962 +<37252> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Camp Area +<37253> +proj=longlat +ellps=intl no_defs <> +# GCS Deception Island +<37254> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Gunung Segara +<37255> +proj=longlat +ellps=bessel no_defs <> +# GCS S42 Hungary +<37257> +proj=longlat +ellps=krass no_defs <> +# GCS Kusaie 1951 +<37259> +proj=longlat +ellps=intl no_defs <> +# GCS Alaskan Islands +<37260> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Assumed Geographic 1 +<104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <> +# GCS Estonia 1937 +<104101> +proj=longlat +ellps=bessel no_defs <> +# GCS Hermannskogel +<104102> +proj=longlat +ellps=bessel no_defs <> +# GCS Sierra Leone 1960 +<104103> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Hong Kong 1980 +<104104> +proj=longlat +ellps=intl no_defs <> +# GCS Datum Lisboa Bessel +<104105> +proj=longlat +ellps=bessel no_defs <> +# GCS Datum Lisboa Hayford +<104106> +proj=longlat +ellps=intl no_defs <> +# GCS RGF 1993 +<104107> +proj=longlat +ellps=GRS80 no_defs <> +# GCS NZGD 2000 +<104108> +proj=longlat +ellps=GRS80 no_defs <> +# GCS Merchich Degree +<104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> +# GCS Voirol 1875 Degree +<104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> +# GCS Voirol Unifie 1960 Degree +<104305> +proj=longlat +ellps=clrk80 no_defs <> diff --git a/proj4/nad/esri.extra b/proj4/nad/esri.extra new file mode 100644 index 000000000000..611dd660d1d4 --- /dev/null +++ b/proj4/nad/esri.extra @@ -0,0 +1,948 @@ +# Pulkovo 1995 GK Zone 2 +<20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <> +# Pulkovo 1995 GK Zone 3 +<20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <> +# Pulkovo 1995 GK Zone 2N +<20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> +# Pulkovo 1995 GK Zone 3N +<20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> +# La Canoa UTM Zone 21N +<24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <> +# NAD 1927 StatePlane Hawaii 1 FIPS 5101 +<26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 2 FIPS 5102 +<26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 3 FIPS 5103 +<26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 4 FIPS 5104 +<26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Hawaii 5 FIPS 5105 +<26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Michigan North FIPS 2111 +<26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Michigan Central FIPS 2112 +<26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Michigan South FIPS 2113 +<26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# Nord Algerie +<30591> +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 <> +# Sud Algerie +<30592> +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 <> +# Germany Zone 1 +<31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 2 +<31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 3 +<31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 4 +<31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# Germany Zone 5 +<31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <> +# NAD 1927 StatePlane Puerto Rico FIPS 5201 +<32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202 +<32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# Sphere Plate Carree +<53001> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Equidistant Cylindrical +<53002> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Miller Cylindrical +<53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Mercator +<53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Sinusoidal +<53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Mollweide +<53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert VI +<53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert V +<53011> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert IV +<53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert III +<53013> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert II +<53014> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Eckert I +<53015> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Gall Stereographic +<53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Behrmann +<53017> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Winkel I +<53018> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Winkel II +<53019> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Polyconic +<53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Quartic Authalic +<53022> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Loximuthal +<53023> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Bonne +<53024> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Hotine +<53025> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Stereographic +<53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Equidistant Conic +<53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Cassini +<53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Van der Grinten I +<53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Robinson +<53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Two Point Equidistant +<53031> +a=6371000 +b=6371000 +units=m no_defs <> +# Sphere Azimuthal Equidistant +<53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> +# World Plate Carree +<54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Equidistant Cylindrical +<54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Miller Cylindrical +<54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Mercator +<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Sinusoidal +<54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Mollweide +<54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert VI +<54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert V +<54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert IV +<54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert III +<54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert II +<54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Eckert I +<54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Gall Stereographic +<54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Behrmann +<54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Winkel I +<54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Winkel II +<54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Polyconic +<54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Quartic Authalic +<54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Loximuthal +<54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Bonne +<54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Hotine +<54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Stereographic +<54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Equidistant Conic +<54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Cassini +<54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Van der Grinten I +<54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Robinson +<54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Two Point Equidistant +<54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# World Azimuthal Equidistant +<54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# NAD 1927 StatePlane Guam FIPS 5400 +<65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Guam FIPS 5400 +<65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Canada Albers Equal Area Conic +<102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Canada Lambert Conformal Conic +<102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# USA Contiguous Albers Equal Area Conic +<102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# USA Contiguous Lambert Conformal Conic +<102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# USA Contiguous Equidistant Conic +<102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Alaska Albers Equal Area Conic +<102006> +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 <> +# Hawaii Albers Equal Area Conic +<102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# North America Albers Equal Area Conic +<102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# North America Lambert Conformal Conic +<102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# North America Equidistant Conic +<102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# Africa Sinusoidal +<102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia Lambert Conformal Conic +<102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Europe Albers Equal Area Conic +<102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# Europe Lambert Conformal Conic +<102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# South America Lambert Conformal Conic +<102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> +# North Pole Azimuthal Equidistant +<102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# North Pole Lambert Azimuthal Equal Area +<102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# North Pole Stereographic +<102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# South Pole Azimuthal Equidistant +<102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# South Pole Lambert Azimuthal Equal Area +<102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# South Pole Stereographic +<102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Africa Albers Equal Area Conic +<102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Africa Equidistant Conic +<102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Africa Lambert Conformal Conic +<102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia North Albers Equal Area Conic +<102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia North Equidistant Conic +<102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia North Lambert Conformal Conic +<102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia South Albers Equal Area Conic +<102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia South Equidistant Conic +<102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Asia South Lambert Conformal Conic +<102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> +# Europe Equidistant Conic +<102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# South America Equidistant Conic +<102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> +# South America Albers Equal Area Conic +<102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> +# S-JTSK Krovak +<102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> +# S-JTSK Ferro Krovak East North +<102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <> +# S-JTSK Krovak East North +<102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> +# Monte Mario Italy 1 +<102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <> +# Monte Mario Italy 2 +<102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <> +# NGO 1948 Norway Zone 1 +<102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 2 +<102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 3 +<102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 4 +<102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 5 +<102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 6 +<102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 7 +<102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 Norway Zone 8 +<102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# RGF 1993 Lambert 93 +<102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <> +# Old Hawaiian UTM Zone 4N +<102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <> +# Old Hawaiian UTM Zone 5N +<102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <> +# NAD 1927 Michigan GeoRef Feet US +<102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 Michigan GeoRef Feet US +<102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1927 Michigan GeoRef Meters +<102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <> +# NAD 1983 Michigan GeoRef Meters +<102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> +# NGO 1948 UTM Zone 32N +<102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 UTM Zone 33N +<102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 UTM Zone 34N +<102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# NGO 1948 UTM Zone 35N +<102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> +# Hong Kong 1980 Grid +<102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <> +# Hong Kong 1980 UTM Zone 49N +<102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <> +# Hong Kong 1980 UTM Zone 50N +<102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <> +# Tokyo UTM Zone 51N +<102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 52N +<102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 53N +<102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 54N +<102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 55N +<102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <> +# Tokyo UTM Zone 56N +<102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <> +# Datum 73 Hayford Gauss IGeoE +<102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <> +# Datum 73 Hayford Gauss IPCC +<102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <> +# Graciosa Base SW 1948 UTM Zone 26N +<102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> +# Lisboa Bessel Bonne +<102163> +ellps=bessel +units=m no_defs <> +# Lisboa Hayford Gauss IGeoE +<102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <> +# Lisboa Hayford Gauss IPCC +<102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> +# Observ Meteorologico 1939 UTM Zone 25N +<102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <> +# Porto Santo 1936 UTM Zone 28N +<102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> +# Sao Braz UTM Zone 26N +<102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> +# Selvagem Grande 1938 UTM Zone 28N +<102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> +# Nord Maroc Degree +<102191> +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=6356514.999904194 +units=m no_defs <> +# Sud Maroc Degree +<102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# Sahara Degree +<102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NAD 1983 HARN StatePlane Alabama East FIPS 0101 +<102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Alabama West FIPS 0102 +<102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California I FIPS 0401 +<102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California II FIPS 0402 +<102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California III FIPS 0403 +<102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California IV FIPS 0404 +<102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California V FIPS 0405 +<102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane California VI FIPS 0406 +<102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arizona East FIPS 0201 +<102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arizona Central FIPS 0202 +<102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arizona West FIPS 0203 +<102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arkansas North FIPS 0301 +<102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Arkansas South FIPS 0302 +<102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Colorado North FIPS 0501 +<102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Colorado Central FIPS 0502 +<102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Colorado South FIPS 0503 +<102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Connecticut FIPS 0600 +<102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Delaware FIPS 0700 +<102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Florida East FIPS 0901 +<102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Florida West FIPS 0902 +<102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Florida North FIPS 0903 +<102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101 +<102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102 +<102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103 +<102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104 +<102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105 +<102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Georgia East FIPS 1001 +<102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Georgia West FIPS 1002 +<102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Idaho East FIPS 1101 +<102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Idaho Central FIPS 1102 +<102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Idaho West FIPS 1103 +<102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Illinois East FIPS 1201 +<102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Illinois West FIPS 1202 +<102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Indiana East FIPS 1301 +<102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Indiana West FIPS 1302 +<102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Kansas North FIPS 1501 +<102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Kansas South FIPS 1502 +<102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Kentucky North FIPS 1601 +<102279> +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 <> +# NAD 1983 HARN StatePlane Kentucky South FIPS 1602 +<102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Louisiana North FIPS 1701 +<102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Louisiana South FIPS 1702 +<102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Maine East FIPS 1801 +<102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Maine West FIPS 1802 +<102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Maryland FIPS 1900 +<102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001 +<102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002 +<102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Michigan North FIPS 2111 +<102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Michigan Central FIPS 2112 +<102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Michigan South FIPS 2113 +<102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Minnesota North FIPS 2201 +<102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Minnesota Central FIPS 2202 +<102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Minnesota South FIPS 2203 +<102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Mississippi East FIPS 2301 +<102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Mississippi West FIPS 2302 +<102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Missouri East FIPS 2401 +<102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Missouri Central FIPS 2402 +<102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Missouri West FIPS 2403 +<102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Montana FIPS 2500 +<102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nebraska FIPS 2600 +<102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nevada East FIPS 2701 +<102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nevada Central FIPS 2702 +<102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Nevada West FIPS 2703 +<102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Hampshire FIPS 2800 +<102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Jersey FIPS 2900 +<102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Mexico East FIPS 3001 +<102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Mexico Central FIPS 3002 +<102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New Mexico West FIPS 3003 +<102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York East FIPS 3101 +<102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York Central FIPS 3102 +<102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York West FIPS 3103 +<102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane New York Long Island FIPS 3104 +<102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane North Dakota North FIPS 3301 +<102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane North Dakota South FIPS 3302 +<102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Ohio North FIPS 3401 +<102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Ohio South FIPS 3402 +<102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oklahoma North FIPS 3501 +<102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oklahoma South FIPS 3502 +<102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oregon North FIPS 3601 +<102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Oregon South FIPS 3602 +<102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Rhode Island FIPS 3800 +<102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane South Dakota North FIPS 4001 +<102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane South Dakota South FIPS 4002 +<102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Tennessee FIPS 4100 +<102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas North FIPS 4201 +<102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas North Central FIPS 4202 +<102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas Central FIPS 4203 +<102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas South Central FIPS 4204 +<102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Texas South FIPS 4205 +<102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Utah North FIPS 4301 +<102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Utah Central FIPS 4302 +<102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Utah South FIPS 4303 +<102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Vermont FIPS 4400 +<102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Virginia North FIPS 4501 +<102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Virginia South FIPS 4502 +<102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Washington North FIPS 4601 +<102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Washington South FIPS 4602 +<102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane West Virginia North FIPS 4701 +<102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane West Virginia South FIPS 4702 +<102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wisconsin North FIPS 4801 +<102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802 +<102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wisconsin South FIPS 4803 +<102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming East FIPS 4901 +<102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902 +<102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903 +<102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Wyoming West FIPS 4904 +<102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> +# NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200 +<102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <> +# Nord Algerie Ancienne Degree +<102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# Sud Algerie Ancienne Degree +<102492> +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=6356514.999904194 +units=m no_defs <> +# NTF France I degrees +<102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NTF France II degrees +<102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NTF France III degrees +<102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# NTF France IV degrees +<102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> +# Nord Algerie Degree +<102591> +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 <> +# Sud Algerie Degree +<102592> +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 <> +# NAD 1983 StatePlane Alabama East FIPS 0101 Feet +<102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alabama West FIPS 0102 Feet +<102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet +<102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet +<102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet +<102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet +<102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet +<102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet +<102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet +<102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet +<102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet +<102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet +<102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California I FIPS 0401 Feet +<102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California II FIPS 0402 Feet +<102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California III FIPS 0403 Feet +<102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California IV FIPS 0404 Feet +<102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California V FIPS 0405 Feet +<102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane California VI FIPS 0406 Feet +<102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arizona East FIPS 0201 Feet +<102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arizona Central FIPS 0202 Feet +<102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arizona West FIPS 0203 Feet +<102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arkansas North FIPS 0301 Feet +<102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Arkansas South FIPS 0302 Feet +<102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Colorado North FIPS 0501 Feet +<102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Colorado Central FIPS 0502 Feet +<102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Colorado South FIPS 0503 Feet +<102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Connecticut FIPS 0600 Feet +<102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Delaware FIPS 0700 Feet +<102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Florida East FIPS 0901 Feet +<102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Florida West FIPS 0902 Feet +<102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Florida North FIPS 0903 Feet +<102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet +<102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet +<102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet +<102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet +<102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet +<102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Georgia East FIPS 1001 Feet +<102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Georgia West FIPS 1002 Feet +<102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Idaho East FIPS 1101 Feet +<102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Idaho Central FIPS 1102 Feet +<102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Idaho West FIPS 1103 Feet +<102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Illinois East FIPS 1201 Feet +<102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Illinois West FIPS 1202 Feet +<102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Indiana East FIPS 1301 Feet +<102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Indiana West FIPS 1302 Feet +<102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Iowa North FIPS 1401 Feet +<102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Iowa South FIPS 1402 Feet +<102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kansas North FIPS 1501 Feet +<102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kansas South FIPS 1502 Feet +<102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kentucky North FIPS 1601 Feet +<102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Kentucky South FIPS 1602 Feet +<102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Louisiana North FIPS 1701 Feet +<102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Louisiana South FIPS 1702 Feet +<102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Maine East FIPS 1801 Feet +<102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Maine West FIPS 1802 Feet +<102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Maryland FIPS 1900 Feet +<102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet +<102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet +<102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Michigan North FIPS 2111 Feet +<102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Michigan Central FIPS 2112 Feet +<102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Michigan South FIPS 2113 Feet +<102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Minnesota North FIPS 2201 Feet +<102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet +<102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Minnesota South FIPS 2203 Feet +<102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Mississippi East FIPS 2301 Feet +<102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Mississippi West FIPS 2302 Feet +<102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Missouri East FIPS 2401 Feet +<102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Missouri Central FIPS 2402 Feet +<102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Missouri West FIPS 2403 Feet +<102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Montana FIPS 2500 Feet +<102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nebraska FIPS 2600 Feet +<102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nevada East FIPS 2701 Feet +<102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nevada Central FIPS 2702 Feet +<102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Nevada West FIPS 2703 Feet +<102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Hampshire FIPS 2800 Feet +<102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Jersey FIPS 2900 Feet +<102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Mexico East FIPS 3001 Feet +<102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet +<102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New Mexico West FIPS 3003 Feet +<102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York East FIPS 3101 Feet +<102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York Central FIPS 3102 Feet +<102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York West FIPS 3103 Feet +<102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane New York Long Island FIPS 3104 Feet +<102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane North Carolina FIPS 3200 Feet +<102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane North Dakota North FIPS 3301 Feet +<102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane North Dakota South FIPS 3302 Feet +<102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Ohio North FIPS 3401 Feet +<102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Ohio South FIPS 3402 Feet +<102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet +<102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet +<102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oregon North FIPS 3601 Feet +<102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Oregon South FIPS 3602 Feet +<102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet +<102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet +<102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Rhode Island FIPS 3800 Feet +<102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane South Carolina FIPS 3900 Feet +<102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane South Dakota North FIPS 4001 Feet +<102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane South Dakota South FIPS 4002 Feet +<102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Tennessee FIPS 4100 Feet +<102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas North FIPS 4201 Feet +<102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas North Central FIPS 4202 Feet +<102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas Central FIPS 4203 Feet +<102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas South Central FIPS 4204 Feet +<102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Texas South FIPS 4205 Feet +<102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Utah North FIPS 4301 Feet +<102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Utah Central FIPS 4302 Feet +<102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Utah South FIPS 4303 Feet +<102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Vermont FIPS 4400 Feet +<102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Virginia North FIPS 4501 Feet +<102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Virginia South FIPS 4502 Feet +<102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Washington North FIPS 4601 Feet +<102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Washington South FIPS 4602 Feet +<102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane West Virginia North FIPS 4701 Feet +<102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane West Virginia South FIPS 4702 Feet +<102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet +<102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet +<102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet +<102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming East FIPS 4901 Feet +<102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet +<102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet +<102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Wyoming West FIPS 4904 Feet +<102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet +<102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# NAD 1983 StatePlane Guam FIPS 5400 Feet +<102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> +# Belge Lambert 1972 +<103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <> +# GCS International 1967 +<4023> +proj=longlat +ellps=aust_SA no_defs <> +# GCS Bern 1898 +<4217> +proj=longlat +ellps=bessel no_defs <> +# GCS Voirol Unifie 1960 +<4305> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Montserrat 1958 +<4404> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Voirol Unifie 1960 Paris +<4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <> +# GCS WGS 1966 +<37001> +proj=longlat +ellps=WGS66 no_defs <> +# GCS Fischer 1960 +<37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <> +# GCS Fischer 1968 +<37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <> +# GCS Fischer Modified +<37004> +proj=longlat +ellps=fschr60m no_defs <> +# GCS Hough 1960 +<37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> +# GCS Everest Modified 1969 +<37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <> +# GCS Walbeck +<37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <> +# GCS Sphere ARC INFO +<37008> +proj=longlat +a=6370997 +b=6370997 no_defs <> +# GCS European 1979 +<37201> +proj=longlat +ellps=intl no_defs <> +# GCS Everest Bangladesh +<37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <> +# GCS Everest India Nepal +<37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <> +# GCS Hjorsey 1955 +<37204> +proj=longlat +ellps=intl no_defs <> +# GCS Hong Kong 1963 +<37205> +proj=longlat +ellps=intl no_defs <> +# GCS Oman +<37206> +proj=longlat +ellps=clrk80 no_defs <> +# GCS South Asia Singapore +<37207> +proj=longlat +ellps=fschr60m no_defs <> +# GCS Ayabelle +<37208> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Point 58 +<37211> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Beacon E 1945 +<37212> +proj=longlat +ellps=intl no_defs <> +# GCS Tern Island 1961 +<37213> +proj=longlat +ellps=intl no_defs <> +# GCS Astro 1952 +<37214> +proj=longlat +ellps=intl no_defs <> +# GCS Bellevue IGN +<37215> +proj=longlat +ellps=intl no_defs <> +# GCS Canton 1966 +<37216> +proj=longlat +ellps=intl no_defs <> +# GCS Chatham Island 1971 +<37217> +proj=longlat +ellps=intl no_defs <> +# GCS DOS 1968 +<37218> +proj=longlat +ellps=intl no_defs <> +# GCS Easter Island 1967 +<37219> +proj=longlat +ellps=intl no_defs <> +# GCS Guam 1963 +<37220> +proj=longlat +ellps=clrk66 no_defs <> +# GCS GUX 1 +<37221> +proj=longlat +ellps=intl no_defs <> +# GCS Johnston Island 1961 +<37222> +proj=longlat +ellps=intl no_defs <> +# GCS Carthage Degree +<37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> +# GCS Midway 1961 +<37224> +proj=longlat +ellps=intl no_defs <> +# GCS Pitcairn 1967 +<37226> +proj=longlat +ellps=intl no_defs <> +# GCS Santo DOS 1965 +<37227> +proj=longlat +ellps=intl no_defs <> +# GCS Viti Levu 1916 +<37228> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Wake Eniwetok 1960 +<37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> +# GCS Wake Island 1952 +<37230> +proj=longlat +ellps=intl no_defs <> +# GCS Anna 1 1965 +<37231> +proj=longlat +ellps=aust_SA no_defs <> +# GCS Gan 1970 +<37232> +proj=longlat +ellps=intl no_defs <> +# GCS ISTS 073 1969 +<37233> +proj=longlat +ellps=intl no_defs <> +# GCS Kerguelen Island 1949 +<37234> +proj=longlat +ellps=intl no_defs <> +# GCS Reunion +<37235> +proj=longlat +ellps=intl no_defs <> +# GCS Ascension Island 1958 +<37237> +proj=longlat +ellps=intl no_defs <> +# GCS DOS 71 4 +<37238> +proj=longlat +ellps=intl no_defs <> +# GCS Cape Canaveral +<37239> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Fort Thomas 1955 +<37240> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Graciosa Base SW 1948 +<37241> +proj=longlat +ellps=intl no_defs <> +# GCS ISTS 061 1968 +<37242> +proj=longlat +ellps=intl no_defs <> +# GCS LC5 1961 +<37243> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Observ Meteorologico 1939 +<37245> +proj=longlat +ellps=intl no_defs <> +# GCS Pico de Las Nieves +<37246> +proj=longlat +ellps=intl no_defs <> +# GCS Porto Santo 1936 +<37247> +proj=longlat +ellps=intl no_defs <> +# GCS Sao Braz +<37249> +proj=longlat +ellps=intl no_defs <> +# GCS Selvagem Grande 1938 +<37250> +proj=longlat +ellps=intl no_defs <> +# GCS Tristan 1968 +<37251> +proj=longlat +ellps=intl no_defs <> +# GCS Samoa 1962 +<37252> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Camp Area +<37253> +proj=longlat +ellps=intl no_defs <> +# GCS Deception Island +<37254> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Gunung Segara +<37255> +proj=longlat +ellps=bessel no_defs <> +# GCS S42 Hungary +<37257> +proj=longlat +ellps=krass no_defs <> +# GCS Kusaie 1951 +<37259> +proj=longlat +ellps=intl no_defs <> +# GCS Alaskan Islands +<37260> +proj=longlat +ellps=clrk66 no_defs <> +# GCS Assumed Geographic 1 +<104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <> +# GCS Estonia 1937 +<104101> +proj=longlat +ellps=bessel no_defs <> +# GCS Hermannskogel +<104102> +proj=longlat +ellps=bessel no_defs <> +# GCS Sierra Leone 1960 +<104103> +proj=longlat +ellps=clrk80 no_defs <> +# GCS Hong Kong 1980 +<104104> +proj=longlat +ellps=intl no_defs <> +# GCS Datum Lisboa Bessel +<104105> +proj=longlat +ellps=bessel no_defs <> +# GCS Datum Lisboa Hayford +<104106> +proj=longlat +ellps=intl no_defs <> +# GCS RGF 1993 +<104107> +proj=longlat +ellps=GRS80 no_defs <> +# GCS NZGD 2000 +<104108> +proj=longlat +ellps=GRS80 no_defs <> +# GCS Merchich Degree +<104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> +# GCS Voirol 1875 Degree +<104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> +# GCS Voirol Unifie 1960 Degree +<104305> +proj=longlat +ellps=clrk80 no_defs <> diff --git a/proj4/nad/install.in b/proj4/nad/install.in new file mode 100755 index 000000000000..d60dc72583f0 --- /dev/null +++ b/proj4/nad/install.in @@ -0,0 +1,53 @@ +: +# SCCSID @(#)install.in 4.8 95/09/24 GIE REL +# +# Installation script all PROJ.4 system reference files. +# +# This script must be executed after compilation of proj library. +# +# Execute as: +# +# install +# +# ------------------------------------------------------------ +prefix=/usr/local +# +lib=${prefix}/lib/proj.4 +# Copy in "init" files +for x in proj_def.dat nad27 nad83 world GL27 +do + cp $x ${lib}/$x + if [ $? -ne 0 ] ; then + echo "init copying failed for file $x" + else + echo "file $x installed" + fi +done +# just test for conus and assume others are there +if [ -f conus.lla ] ; then +# install nad2nad NADCON files + echo "installing ${lib}/nad2783" + lib=${lib}/nad2783 + if [ ! -d $lib ] ; then + mkdir $lib + if [ $? -ne 0 ] ; then + echo "failed to make dir $lib" + echo "nad2nad lib install stopped" + exit 1 + fi + fi +# Process ascii grid into nad2nad compatible files. + for x in *.lla ; do + dest=`expr $x : '\(.*\)\.lla'` + cat < $x | ../src/nad2bin ${lib}/${dest} + if [ $? -ne 0 ] ; then + echo "nad2nad file install failed on file ${lib}/${dest}" + exit 1 + fi + echo "${lib}/${dest} installed" + done +else + echo "nad2nad NADCON files not present" +fi +echo "normal completion" +exit 0 diff --git a/proj4/nad/makefile.vc b/proj4/nad/makefile.vc new file mode 100644 index 000000000000..287ff2c373c3 --- /dev/null +++ b/proj4/nad/makefile.vc @@ -0,0 +1,32 @@ +# +# makefile.vc - builds PROJ.4 library with Visual C++ +# + +!INCLUDE ..\nmake.opt + +OLD_GRIDS = conus MD TN WI WO alaska hawaii prvi stgeorge stlrnc stpaul null + +OTHER_FILES = FL GL27 nad.lst nad27 nad83 proj_def.dat world epsg esri \ + esri.extra other.extra IGNF + + + +default: + if exist conus.lla $(MAKE) /f makefile.vc nadshift + +nadshift: + for %f in ( $(OLD_GRIDS) ) do ..\src\nad2bin.exe %f < %f.lla + +clean: + -for %f in ( $(OLD_GRIDS) ) do del %f + +install-nadgrids: + for %f in ( $(OLD_GRIDS) ) do copy %f $(PROJ_LIB_DIR) + +install-all: + -mkdir $(INSTDIR) + -mkdir $(PROJ_LIB_DIR) + for %f in ( $(OTHER_FILES) ) do copy %f $(PROJ_LIB_DIR) + if exist conus $(MAKE) /f makefile.vc install-nadgrids + -copy *.gsb $(PROJ_LIB_DIR) + -copy ntv1_can.dat $(PROJ_LIB_DIR) diff --git a/proj4/nad/nad.lst b/proj4/nad/nad.lst new file mode 100644 index 000000000000..cc4277220f47 --- /dev/null +++ b/proj4/nad/nad.lst @@ -0,0 +1,142 @@ + Listing of State Plane North American Datum Zones + + NGS zone number + State and zone 1927 1983 + +Alabama east .................. 101 101 +Alabama west .................. 102 102 +Alaska zone no. 1 ............. 5001 5001 +Alaska zone no. 2 ............. 5002 5002 +Alaska zone no. 3 ............. 5003 5003 +Alaska zone no. 4 ............. 5004 5004 +Alaska zone no. 5 ............. 5005 5005 +Alaska zone no. 6 ............. 5006 5006 +Alaska zone no. 7 ............. 5007 5007 +Alaska zone no. 8 ............. 5008 5008 +Alaska zone no. 9 ............. 5009 5009 +Alaska zone no. 10 ............ 5010 5010 +American Samoa ................ 5300 +Arizona central ............... 202 202 +Arizona east .................. 201 201 +Arizona west .................. 203 203 +Arkansas north ................ 301 301 +Arkansas south ................ 302 302 +California I .................. 401 401 +California II ................. 402 402 +California III ................ 403 403 +California IV ................. 404 404 +California V .................. 405 405 +California VI ................. 406 406 +California VII ................ 407 +Colorado central .............. 502 502 +Colorado north ................ 501 501 +Colorado south ................ 503 503 +Connecticut ................... 600 600 +Delaware ...................... 700 700 +Florida east .................. 901 901 +Florida north ................. 903 903 +Florida west .................. 902 902 +Georgia east .................. 1001 1001 +Georgia west .................. 1002 1002 +Guam Island ................... 5400 +Hawaii 1 ...................... 5101 5101 +Hawaii 2 ...................... 5102 5102 +Hawaii 3 ...................... 5103 5103 +Hawaii 4 ...................... 5104 5104 +Hawaii 5 ...................... 5105 5105 +Idaho central ................. 1102 1102 +Idaho east .................... 1101 1101 +Idaho west .................... 1103 1103 +Illinois east ................. 1201 1201 +Illinois west ................. 1202 1202 +Indiana east .................. 1301 1301 +Indiana west .................. 1302 1302 +Iowa north .................... 1401 1401 +Iowa south .................... 1402 1402 +Kansas north .................. 1501 1501 +Kansas south .................. 1502 1502 +Kentucky north ................ 1601 1601 +Kentucky south ................ 1602 1602 +Louisiana north ............... 1701 1701 +Louisiana offshore ............ 1703 1703 +Louisiana south ............... 1702 1702 +Maine east .................... 1801 1801 +Maine west .................... 1802 1802 +Maryland ...................... 1900 1900 +Massachusetts island .......... 2002 2002 +Massachusetts mainland ........ 2001 2001 +Michigan central/l ............ 2112 2112 current +Michigan central/m ............ 2102 old +Michigan east ................. 2101 old +Michigan north ................ 2111 2111 current +Michigan south ................ 2113 2113 current +Michigan west ................. 2103 old +Minnesota central ............. 2202 2202 +Minnesota north ............... 2201 2201 +Minnesota south ............... 2203 2203 +Mississippi east .............. 2301 2301 +Mississippi west .............. 2302 2302 +Missouri central .............. 2402 2402 +Missouri east ................. 2401 2401 +Missouri west ................. 2403 2403 +Montana ....................... 2500 +Montana central ............... 2502 +Montana north ................. 2501 +Montana south ................. 2503 +Nebraska ...................... 2600 +Nebraska north ................ 2601 +Nebraska south ................ 2602 +Nevada central ................ 2702 2702 +Nevada east ................... 2701 2701 +Nevada west ................... 2703 2703 +New hampshire ................. 2800 2800 +New jersey .................... 2900 2900 +New mexico central ............ 3002 3002 +New mexico east ............... 3001 3001 +New mexico west ............... 3003 3003 +New york central .............. 3102 3102 +New york east ................. 3101 3101 +New york long island .......... 3104 3104 +New york west ................. 3103 3103 +North carolina ................ 3200 3200 +North dakota north ............ 3301 3301 +North dakota south ............ 3302 3302 +Ohio north .................... 3401 3401 +Ohio south .................... 3402 3402 +Oklahoma north ................ 3501 3501 +Oklahoma south ................ 3502 3502 +Oregon north .................. 3601 3601 +Oregon south .................. 3602 3602 +Pennsylvania north ............ 3701 3701 +Pennsylvania south ............ 3702 3702 +Puerto Rico, Virgin Islands ... 5201 5200 +Rhode Island .................. 3800 3800 +South Carolina ................ 3900 +South Carolina north .......... 3901 +South Carolina south .......... 3902 +South Dakota north ............ 4001 4001 +South Dakota south ............ 4002 4002 +Tennessee ..................... 4100 4100 +Texas central ................. 4203 4203 +Texas north ................... 4201 4201 +Texas north central ........... 4202 4202 +Texas south ................... 4205 4205 +Texas south central ........... 4204 4204 +Utah central .................. 4302 4302 +Utah north .................... 4301 4301 +Utah south .................... 4303 4303 +Vermont ....................... 4400 4400 +Virgin Islands, St. Croix ..... 5202 +Virginia north ................ 4501 4501 +Virginia south ................ 4502 4502 +Washington north .............. 4601 4601 +Washington south .............. 4602 4602 +West Virginia north ........... 4701 4701 +West Virginia south ........... 4702 4702 +Wisconsin central ............. 4802 4802 +Wisconsin north ............... 4801 4801 +Wisconsin south ............... 4803 4803 +Wyoming east .................. 4901 4901 +Wyoming east central .......... 4902 4902 +Wyoming west .................. 4904 4904 +Wyoming west central .......... 4903 4903 diff --git a/proj4/nad/nad27 b/proj4/nad/nad27 new file mode 100644 index 000000000000..6e06900cd238 --- /dev/null +++ b/proj4/nad/nad27 @@ -0,0 +1,809 @@ +# SCCSID @(#)nad27 4.1 92/12/20 GIE +# proj +init files for: +# +# State Plane Coordinate Systems, +# North American Datum 1927 + +# 101: alabama east: nad27 +<101> proj=tmerc datum=NAD27 +lon_0=-85d50 lat_0=30d30 k=.99996 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 102: alabama west: nad27 +<102> proj=tmerc datum=NAD27 +lon_0=-87d30 lat_0=30 k=.9999333333333333 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5010: alaska zone no. 10: nad27 +<5010> proj=lcc datum=NAD27 +lon_0=-176 lat_1=53d50 lat_2=51d50 lat_0=51 +x_0=914401.8288036576 y_0=0 +no_defs <> + +# 5300: american samoa: nad27 +<5300> proj=lcc datum=NAD27 +lon_0=-170 lat_1=-14d16 lat_2=-14d16 lat_0=-14d16 +x_0=152400.3048006096 y_0=95169.31165862332 +no_defs <> + +# 201: arizona east: nad27 +<201> proj=tmerc datum=NAD27 +lon_0=-110d10 lat_0=31 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 202: arizona central: nad27 +<202> proj=tmerc datum=NAD27 +lon_0=-111d55 lat_0=31 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 203: arizona west: nad27 +<203> proj=tmerc datum=NAD27 +lon_0=-113d45 lat_0=31 k=.9999333333333333 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 301: arkansas north: nad27 +<301> proj=lcc datum=NAD27 +lon_0=-92 lat_1=36d14 lat_2=34d56 lat_0=34d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 302: arkansas south: nad27 +<302> proj=lcc datum=NAD27 +lon_0=-92 lat_1=34d46 lat_2=33d18 lat_0=32d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 401: california i: nad27 +<401> proj=lcc datum=NAD27 +lon_0=-122 lat_1=41d40 lat_2=40 lat_0=39d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 402: california ii: nad27 +<402> proj=lcc datum=NAD27 +lon_0=-122 lat_1=39d50 lat_2=38d20 lat_0=37d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 403: california iii: nad27 +<403> proj=lcc datum=NAD27 +lon_0=-120d30 lat_1=38d26 lat_2=37d4 lat_0=36d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 404: california iv: nad27 +<404> proj=lcc datum=NAD27 +lon_0=-119 lat_1=37d15 lat_2=36 lat_0=35d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 405: california v: nad27 +<405> proj=lcc datum=NAD27 +lon_0=-118 lat_1=35d28 lat_2=34d2 lat_0=33d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 406: california vi: nad27 +<406> proj=lcc datum=NAD27 +lon_0=-116d15 lat_1=33d53 lat_2=32d47 lat_0=32d10 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 407: california vii: nad27 +<407> proj=lcc datum=NAD27 +lon_0=-118d20 lat_1=34d25 lat_2=33d52 lat_0=34d8 +x_0=1276106.450596901 y_0=1268253.006858014 +no_defs <> + +# 501: colorado north: nad27 +<501> proj=lcc datum=NAD27 +lon_0=-105d30 lat_1=40d47 lat_2=39d43 lat_0=39d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 502: colorado central: nad27 +<502> proj=lcc datum=NAD27 +lon_0=-105d30 lat_1=39d45 lat_2=38d27 lat_0=37d50 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 503: colorado south: nad27 +<503> proj=lcc datum=NAD27 +lon_0=-105d30 lat_1=38d26 lat_2=37d14 lat_0=36d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 600: connecticut ---: nad27 +<600> proj=lcc datum=NAD27 +lon_0=-72d45 lat_1=41d52 lat_2=41d12 lat_0=40d50 +x_0=182880.3657607315 y_0=0 +no_defs <> + +# 700: delaware ---: nad27 +<700> proj=tmerc datum=NAD27 +lon_0=-75d25 lat_0=38 k=.999995 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 901: florida east: nad27 +<901> proj=tmerc datum=NAD27 +lon_0=-81 lat_0=24d20 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 902: florida west: nad27 +<902> proj=tmerc datum=NAD27 +lon_0=-82 lat_0=24d20 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 903: florida north: nad27 +<903> proj=lcc datum=NAD27 +lon_0=-84d30 lat_1=30d45 lat_2=29d35 lat_0=29 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1001: georgia east: nad27 +<1001> proj=tmerc datum=NAD27 +lon_0=-82d10 lat_0=30 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1002: georgia west: nad27 +<1002> proj=tmerc datum=NAD27 +lon_0=-84d10 lat_0=30 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5101: hawaii 1: nad27 +<5101> proj=tmerc datum=NAD27 +lon_0=-155d30 lat_0=18d50 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5102: hawaii 2: nad27 +<5102> proj=tmerc datum=NAD27 +lon_0=-156d40 lat_0=20d20 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5103: hawaii 3: nad27 +<5103> proj=tmerc datum=NAD27 +lon_0=-158 lat_0=21d10 k=.99999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5104: hawaii 4: nad27 +<5104> proj=tmerc datum=NAD27 +lon_0=-159d30 lat_0=21d50 k=.99999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5105: hawaii 5: nad27 +<5105> proj=tmerc datum=NAD27 +lon_0=-160d10 lat_0=21d40 k=1 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1101: idaho east: nad27 +<1101> proj=tmerc datum=NAD27 +lon_0=-112d10 lat_0=41d40 k=.9999473684210526 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1102: idaho central: nad27 +<1102> proj=tmerc datum=NAD27 +lon_0=-114 lat_0=41d40 k=.9999473684210526 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1103: idaho west: nad27 +<1103> proj=tmerc datum=NAD27 +lon_0=-115d45 lat_0=41d40 k=.9999333333333333 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1201: illinois east: nad27 +<1201> proj=tmerc datum=NAD27 +lon_0=-88d20 lat_0=36d40 k=.999975 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1202: illinois west: nad27 +<1202> proj=tmerc datum=NAD27 +lon_0=-90d10 lat_0=36d40 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1301: indiana east: nad27 +<1301> proj=tmerc datum=NAD27 +lon_0=-85d40 lat_0=37d30 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1302: indiana west: nad27 +<1302> proj=tmerc datum=NAD27 +lon_0=-87d5 lat_0=37d30 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1401: iowa north: nad27 +<1401> proj=lcc datum=NAD27 +lon_0=-93d30 lat_1=43d16 lat_2=42d4 lat_0=41d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1402: iowa south: nad27 +<1402> proj=lcc datum=NAD27 +lon_0=-93d30 lat_1=41d47 lat_2=40d37 lat_0=40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1501: kansas north: nad27 +<1501> proj=lcc datum=NAD27 +lon_0=-98 lat_1=39d47 lat_2=38d43 lat_0=38d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1502: kansas south: nad27 +<1502> proj=lcc datum=NAD27 +lon_0=-98d30 lat_1=38d34 lat_2=37d16 lat_0=36d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1601: kentucky north: nad27 +<1601> proj=lcc datum=NAD27 +lon_0=-84d15 lat_1=38d58 lat_2=37d58 lat_0=37d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1602: kentucky south: nad27 +<1602> proj=lcc datum=NAD27 +lon_0=-85d45 lat_1=37d56 lat_2=36d44 lat_0=36d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1701: louisiana north: nad27 +<1701> proj=lcc datum=NAD27 +lon_0=-92d30 lat_1=32d40 lat_2=31d10 lat_0=30d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1702: louisiana south: nad27 +<1702> proj=lcc datum=NAD27 +lon_0=-91d20 lat_1=30d42 lat_2=29d18 lat_0=28d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1703: louisiana offshore: nad27 +<1703> proj=lcc datum=NAD27 +lon_0=-91d20 lat_1=27d50 lat_2=26d10 lat_0=25d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 1801: maine east: nad27 +<1801> proj=tmerc datum=NAD27 +lon_0=-68d30 lat_0=43d50 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1802: maine west: nad27 +<1802> proj=tmerc datum=NAD27 +lon_0=-70d10 lat_0=42d50 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 1900: maryland ---: nad27 +<1900> proj=lcc datum=NAD27 +lon_0=-77 lat_1=39d27 lat_2=38d18 lat_0=37d50 +x_0=243840.4876809754 y_0=0 +no_defs <> + +# 2001: massachusetts mainland: nad27 +<2001> proj=lcc datum=NAD27 +lon_0=-71d30 lat_1=42d41 lat_2=41d43 lat_0=41 +x_0=182880.3657607315 y_0=0 +no_defs <> + +# 2002: massachusetts island: nad27 +<2002> proj=lcc datum=NAD27 +lon_0=-70d30 lat_1=41d29 lat_2=41d17 lat_0=41 +x_0=60960.12192024384 y_0=0 +no_defs <> + +# 2101: michigan east: nad27 +<2101> proj=tmerc datum=NAD27 +lon_0=-83d40 lat_0=41d30 k=.9999428571428571 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2102: michigan central/m: nad27 +<2102> proj=tmerc datum=NAD27 +lon_0=-85d45 lat_0=41d30 k=.9999090909090909 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2103: michigan west: nad27 +<2103> proj=tmerc datum=NAD27 +lon_0=-88d45 lat_0=41d30 k=.9999090909090909 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2111: michigan north: nad27 +<2111> proj=lcc a=6378450.047 es=.006768657997291094 +lon_0=-87 lat_1=47d5 lat_2=45d29 lat_0=44d47 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2112: michigan central/l: nad27 +<2112> proj=lcc a=6378450.047 es=.006768657997291094 +lon_0=-84d20 lat_1=45d42 lat_2=44d11 lat_0=43d19 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2113: michigan south: nad27 +<2113> proj=lcc a=6378450.047 es=.006768657997291094 +lon_0=-84d20 lat_1=43d40 lat_2=42d6 lat_0=41d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2201: minnesota north: nad27 +<2201> proj=lcc datum=NAD27 +lon_0=-93d6 lat_1=48d38 lat_2=47d2 lat_0=46d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2202: minnesota central: nad27 +<2202> proj=lcc datum=NAD27 +lon_0=-94d15 lat_1=47d3 lat_2=45d37 lat_0=45 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2203: minnesota south: nad27 +<2203> proj=lcc datum=NAD27 +lon_0=-94 lat_1=45d13 lat_2=43d47 lat_0=43 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2301: mississippi east: nad27 +<2301> proj=tmerc datum=NAD27 +lon_0=-88d50 lat_0=29d40 k=.99996 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2302: mississippi west: nad27 +<2302> proj=tmerc datum=NAD27 +lon_0=-90d20 lat_0=30d30 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2401: missouri east: nad27 +<2401> proj=tmerc datum=NAD27 +lon_0=-90d30 lat_0=35d50 k=.9999333333333333 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2402: missouri central: nad27 +<2402> proj=tmerc datum=NAD27 +lon_0=-92d30 lat_0=35d50 k=.9999333333333333 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2403: missouri west: nad27 +<2403> proj=tmerc datum=NAD27 +lon_0=-94d30 lat_0=36d10 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2501: montana north: nad27 +<2501> proj=lcc datum=NAD27 +lon_0=-109d30 lat_1=48d43 lat_2=47d51 lat_0=47 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2502: montana central: nad27 +<2502> proj=lcc datum=NAD27 +lon_0=-109d30 lat_1=47d53 lat_2=46d27 lat_0=45d50 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2503: montana south: nad27 +<2503> proj=lcc datum=NAD27 +lon_0=-109d30 lat_1=46d24 lat_2=44d52 lat_0=44 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2601: nebraska north: nad27 +<2601> proj=lcc datum=NAD27 +lon_0=-100 lat_1=42d49 lat_2=41d51 lat_0=41d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2602: nebraska south: nad27 +<2602> proj=lcc datum=NAD27 +lon_0=-99d30 lat_1=41d43 lat_2=40d17 lat_0=39d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 2701: nevada east: nad27 +<2701> proj=tmerc datum=NAD27 +lon_0=-115d35 lat_0=34d45 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2702: nevada central: nad27 +<2702> proj=tmerc datum=NAD27 +lon_0=-116d40 lat_0=34d45 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2703: nevada west: nad27 +<2703> proj=tmerc datum=NAD27 +lon_0=-118d35 lat_0=34d45 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2800: new hampshire ---: nad27 +<2800> proj=tmerc datum=NAD27 +lon_0=-71d40 lat_0=42d30 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 2900: new jersey ---: nad27 +<2900> proj=tmerc datum=NAD27 +lon_0=-74d40 lat_0=38d50 k=.999975 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3001: new mexico east: nad27 +<3001> proj=tmerc datum=NAD27 +lon_0=-104d20 lat_0=31 k=.9999090909090909 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3002: new mexico central: nad27 +<3002> proj=tmerc datum=NAD27 +lon_0=-106d15 lat_0=31 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3003: new mexico west: nad27 +<3003> proj=tmerc datum=NAD27 +lon_0=-107d50 lat_0=31 k=.9999166666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3101: new york east: nad27 +<3101> proj=tmerc datum=NAD27 +lon_0=-74d20 lat_0=40 k=.9999666666666667 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3102: new york central: nad27 +<3102> proj=tmerc datum=NAD27 +lon_0=-76d35 lat_0=40 k=.9999375 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3103: new york west: nad27 +<3103> proj=tmerc datum=NAD27 +lon_0=-78d35 lat_0=40 k=.9999375 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3104: new york long island: nad27 +<3104> proj=lcc datum=NAD27 +lon_0=-74 lat_1=41d2 lat_2=40d40 lat_0=40d30 +x_0=609601.2192024384 y_0=30480.06096012192 +no_defs <> + +# 3200: north carolina ---: nad27 +<3200> proj=lcc datum=NAD27 +lon_0=-79 lat_1=36d10 lat_2=34d20 lat_0=33d45 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3301: north dakota north: nad27 +<3301> proj=lcc datum=NAD27 +lon_0=-100d30 lat_1=48d44 lat_2=47d26 lat_0=47 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3302: north dakota south: nad27 +<3302> proj=lcc datum=NAD27 +lon_0=-100d30 lat_1=47d29 lat_2=46d11 lat_0=45d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3401: ohio north: nad27 +<3401> proj=lcc datum=NAD27 +lon_0=-82d30 lat_1=41d42 lat_2=40d26 lat_0=39d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3402: ohio south: nad27 +<3402> proj=lcc datum=NAD27 +lon_0=-82d30 lat_1=40d2 lat_2=38d44 lat_0=38 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3501: oklahoma north: nad27 +<3501> proj=lcc datum=NAD27 +lon_0=-98 lat_1=36d46 lat_2=35d34 lat_0=35 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3502: oklahoma south: nad27 +<3502> proj=lcc datum=NAD27 +lon_0=-98 lat_1=35d14 lat_2=33d56 lat_0=33d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3601: oregon north: nad27 +<3601> proj=lcc datum=NAD27 +lon_0=-120d30 lat_1=46 lat_2=44d20 lat_0=43d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3602: oregon south: nad27 +<3602> proj=lcc datum=NAD27 +lon_0=-120d30 lat_1=44 lat_2=42d20 lat_0=41d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3701: pennsylvania north: nad27 +<3701> proj=lcc datum=NAD27 +lon_0=-77d45 lat_1=41d57 lat_2=40d53 lat_0=40d10 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3702: pennsylvania south: nad27 +<3702> proj=lcc datum=NAD27 +lon_0=-77d45 lat_1=40d58 lat_2=39d56 lat_0=39d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3800: rhode island ---: nad27 +<3800> proj=tmerc datum=NAD27 +lon_0=-71d30 lat_0=41d5 k=.99999375 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 3901: south carolina north: nad27 +<3901> proj=lcc datum=NAD27 +lon_0=-81 lat_1=34d58 lat_2=33d46 lat_0=33 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 3902: south carolina south: nad27 +<3902> proj=lcc datum=NAD27 +lon_0=-81 lat_1=33d40 lat_2=32d20 lat_0=31d50 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4001: south dakota north: nad27 +<4001> proj=lcc datum=NAD27 +lon_0=-100 lat_1=45d41 lat_2=44d25 lat_0=43d50 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4002: south dakota south: nad27 +<4002> proj=lcc datum=NAD27 +lon_0=-100d20 lat_1=44d24 lat_2=42d50 lat_0=42d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4100: tennessee ---: nad27 +<4100> proj=lcc datum=NAD27 +lon_0=-86 lat_1=36d25 lat_2=35d15 lat_0=34d40 +x_0=609601.2192024384 y_0=30480.06096012192 +no_defs <> + +# 4201: texas north: nad27 +<4201> proj=lcc datum=NAD27 +lon_0=-101d30 lat_1=36d11 lat_2=34d39 lat_0=34 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4202: texas north central: nad27 +<4202> proj=lcc datum=NAD27 +lon_0=-97d30 lat_1=33d58 lat_2=32d8 lat_0=31d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4203: texas central: nad27 +<4203> proj=lcc datum=NAD27 +lon_0=-100d20 lat_1=31d53 lat_2=30d7 lat_0=29d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4204: texas south central: nad27 +<4204> proj=lcc datum=NAD27 +lon_0=-99 lat_1=30d17 lat_2=28d23 lat_0=27d50 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4205: texas south: nad27 +<4205> proj=lcc datum=NAD27 +lon_0=-98d30 lat_1=27d50 lat_2=26d10 lat_0=25d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4301: utah north: nad27 +<4301> proj=lcc datum=NAD27 +lon_0=-111d30 lat_1=41d47 lat_2=40d43 lat_0=40d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4302: utah central: nad27 +<4302> proj=lcc datum=NAD27 +lon_0=-111d30 lat_1=40d39 lat_2=39d1 lat_0=38d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4303: utah south: nad27 +<4303> proj=lcc datum=NAD27 +lon_0=-111d30 lat_1=38d21 lat_2=37d13 lat_0=36d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4400: vermont ---: nad27 +<4400> proj=tmerc datum=NAD27 +lon_0=-72d30 lat_0=42d30 k=.9999642857142857 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 4501: virginia north: nad27 +<4501> proj=lcc datum=NAD27 +lon_0=-78d30 lat_1=39d12 lat_2=38d2 lat_0=37d40 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4502: virginia south: nad27 +<4502> proj=lcc datum=NAD27 +lon_0=-78d30 lat_1=37d58 lat_2=36d46 lat_0=36d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4601: washington north: nad27 +<4601> proj=lcc datum=NAD27 +lon_0=-120d50 lat_1=48d44 lat_2=47d30 lat_0=47 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4602: washington south: nad27 +<4602> proj=lcc datum=NAD27 +lon_0=-120d30 lat_1=47d20 lat_2=45d50 lat_0=45d20 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4701: west virginia north: nad27 +<4701> proj=lcc datum=NAD27 +lon_0=-79d30 lat_1=40d15 lat_2=39 lat_0=38d30 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4702: west virginia south: nad27 +<4702> proj=lcc datum=NAD27 +lon_0=-81 lat_1=38d53 lat_2=37d29 lat_0=37 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4801: wisconsin north: nad27 +<4801> proj=lcc datum=NAD27 +lon_0=-90 lat_1=46d46 lat_2=45d34 lat_0=45d10 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4802: wisconsin central: nad27 +<4802> proj=lcc datum=NAD27 +lon_0=-90 lat_1=45d30 lat_2=44d15 lat_0=43d50 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4803: wisconsin south: nad27 +<4803> proj=lcc datum=NAD27 +lon_0=-90 lat_1=44d4 lat_2=42d44 lat_0=42 +x_0=609601.2192024384 y_0=0 +no_defs <> + +# 4901: wyoming east: nad27 +<4901> proj=tmerc datum=NAD27 +lon_0=-105d10 lat_0=40d40 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 4902: wyoming east central: nad27 +<4902> proj=tmerc datum=NAD27 +lon_0=-107d20 lat_0=40d40 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 4903: wyoming west central: nad27 +<4903> proj=tmerc datum=NAD27 +lon_0=-108d45 lat_0=40d40 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 4904: wyoming west: nad27 +<4904> proj=tmerc datum=NAD27 +lon_0=-110d5 lat_0=40d40 k=.9999411764705882 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5001: alaska zone no. 1: nad27 +<5001> proj=omerc datum=NAD27 +k=.9999 lonc=-133d40 lat_0=57 alpha=-36d52'11.6315 +x_0=818585.5672270928 y_0=575219.2451072642 +no_defs <> + +# 5002: alaska zone no. 2: nad27 +<5002> proj=tmerc datum=NAD27 +lon_0=-142 lat_0=54 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5003: alaska zone no. 3: nad27 +<5003> proj=tmerc datum=NAD27 +lon_0=-146 lat_0=54 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5004: alaska zone no. 4: nad27 +<5004> proj=tmerc datum=NAD27 +lon_0=-150 lat_0=54 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5005: alaska zone no. 5: nad27 +<5005> proj=tmerc datum=NAD27 +lon_0=-154 lat_0=54 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5006: alaska zone no. 6: nad27 +<5006> proj=tmerc datum=NAD27 +lon_0=-158 lat_0=54 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5007: alaska zone no. 7: nad27 +<5007> proj=tmerc datum=NAD27 +lon_0=-162 lat_0=54 k=.9999 +x_0=213360.4267208534 y_0=0 +no_defs <> + +# 5008: alaska zone no. 8: nad27 +<5008> proj=tmerc datum=NAD27 +lon_0=-166 lat_0=54 k=.9999 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5009: alaska zone no. 9: nad27 +<5009> proj=tmerc datum=NAD27 +lon_0=-170 lat_0=54 k=.9999 +x_0=182880.3657607315 y_0=0 +no_defs <> + +# 5201: puerto rico and virgin islands: nad27 +<5201> proj=lcc datum=NAD27 +lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50 +x_0=152400.3048006096 y_0=0 +no_defs <> + +# 5202: virgin islands st. croix: nad27 +<5202> proj=lcc datum=NAD27 +lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50 +x_0=152400.3048006096 y_0=30480.06096012192 +no_defs <> + +# 5400: guam island: nad27 +<5400> proj=poly datum=NAD27 +x_0=50000 y_0=50000 lon_0=144d44'55.50254 lat_0=13d28'20.87887 +no_defs <> + diff --git a/proj4/nad/nad83 b/proj4/nad/nad83 new file mode 100644 index 000000000000..e740a4d57171 --- /dev/null +++ b/proj4/nad/nad83 @@ -0,0 +1,744 @@ +# SCCSID @(#)nad83 4.1 92/12/20 GIE +# proj +init files for: +# +# State Plane Coordinate Systems, +# North American Datum 1983 + +# 101: alabama east: nad83 +<101> proj=tmerc datum=NAD83 +lon_0=-85d50 lat_0=30d30 k=.99996 +x_0=200000 y_0=0 +no_defs <> + +# 102: alabama west: nad83 +<102> proj=tmerc datum=NAD83 +lon_0=-87d30 lat_0=30 k=.9999333333333333 +x_0=600000 y_0=0 +no_defs <> + +# 5010: alaska zone no. 10: nad83 +<5010> proj=lcc datum=NAD83 +lon_0=-176 lat_1=53d50 lat_2=51d50 lat_0=51 +x_0=1000000 y_0=0 +no_defs <> + +# 201: arizona east: nad83 +<201> proj=tmerc datum=NAD83 +lon_0=-110d10 lat_0=31 k=.9999 +x_0=213360 y_0=0 +no_defs <> + +# 202: arizona central: nad83 +<202> proj=tmerc datum=NAD83 +lon_0=-111d55 lat_0=31 k=.9999 +x_0=213360 y_0=0 +no_defs <> + +# 203: arizona west: nad83 +<203> proj=tmerc datum=NAD83 +lon_0=-113d45 lat_0=31 k=.9999333333333333 +x_0=213360 y_0=0 +no_defs <> + +# 301: arkansas north: nad83 +<301> proj=lcc datum=NAD83 +lon_0=-92 lat_1=36d14 lat_2=34d56 lat_0=34d20 +x_0=400000 y_0=0 +no_defs <> + +# 302: arkansas south: nad83 +<302> proj=lcc datum=NAD83 +lon_0=-92 lat_1=34d46 lat_2=33d18 lat_0=32d40 +x_0=400000 y_0=400000 +no_defs <> + +# 401: california i: nad83 +<401> proj=lcc datum=NAD83 +lon_0=-122 lat_1=41d40 lat_2=40 lat_0=39d20 +x_0=2000000 y_0=500000 +no_defs <> + +# 402: california ii: nad83 +<402> proj=lcc datum=NAD83 +lon_0=-122 lat_1=39d50 lat_2=38d20 lat_0=37d40 +x_0=2000000 y_0=500000 +no_defs <> + +# 403: california iii: nad83 +<403> proj=lcc datum=NAD83 +lon_0=-120d30 lat_1=38d26 lat_2=37d4 lat_0=36d30 +x_0=2000000 y_0=500000 +no_defs <> + +# 404: california iv: nad83 +<404> proj=lcc datum=NAD83 +lon_0=-119 lat_1=37d15 lat_2=36 lat_0=35d20 +x_0=2000000 y_0=500000 +no_defs <> + +# 405: california v: nad83 +<405> proj=lcc datum=NAD83 +lon_0=-118 lat_1=35d28 lat_2=34d2 lat_0=33d30 +x_0=2000000 y_0=500000 +no_defs <> + +# 406: california vi: nad83 +<406> proj=lcc datum=NAD83 +lon_0=-116d15 lat_1=33d53 lat_2=32d47 lat_0=32d10 +x_0=2000000 y_0=500000 +no_defs <> + +# 501: colorado north: nad83 +<501> proj=lcc datum=NAD83 +lon_0=-105d30 lat_1=40d47 lat_2=39d43 lat_0=39d20 +x_0=914401.8289 y_0=304800.6096 +no_defs <> + +# 502: colorado central: nad83 +<502> proj=lcc datum=NAD83 +lon_0=-105d30 lat_1=39d45 lat_2=38d27 lat_0=37d50 +x_0=914401.8289 y_0=304800.6096 +no_defs <> + +# 503: colorado south: nad83 +<503> proj=lcc datum=NAD83 +lon_0=-105d30 lat_1=38d26 lat_2=37d14 lat_0=36d40 +x_0=914401.8289 y_0=304800.6096 +no_defs <> + +# 600: connecticut ---: nad83 +<600> proj=lcc datum=NAD83 +lon_0=-72d45 lat_1=41d52 lat_2=41d12 lat_0=40d50 +x_0=304800.6096 y_0=152400.3048 +no_defs <> + +# 700: delaware ---: nad83 +<700> proj=tmerc datum=NAD83 +lon_0=-75d25 lat_0=38 k=.999995 +x_0=200000 y_0=0 +no_defs <> + +# 901: florida east: nad83 +<901> proj=tmerc datum=NAD83 +lon_0=-81 lat_0=24d20 k=.9999411764705882 +x_0=200000 y_0=0 +no_defs <> + +# 902: florida west: nad83 +<902> proj=tmerc datum=NAD83 +lon_0=-82 lat_0=24d20 k=.9999411764705882 +x_0=200000 y_0=0 +no_defs <> + +# 903: florida north: nad83 +<903> proj=lcc datum=NAD83 +lon_0=-84d30 lat_1=30d45 lat_2=29d35 lat_0=29 +x_0=600000 y_0=0 +no_defs <> + +# 1001: georgia east: nad83 +<1001> proj=tmerc datum=NAD83 +lon_0=-82d10 lat_0=30 k=.9999 +x_0=200000 y_0=0 +no_defs <> + +# 1002: georgia west: nad83 +<1002> proj=tmerc datum=NAD83 +lon_0=-84d10 lat_0=30 k=.9999 +x_0=700000 y_0=0 +no_defs <> + +# 5101: hawaii 1: nad83 +<5101> proj=tmerc datum=NAD83 +lon_0=-155d30 lat_0=18d50 k=.9999666666666667 +x_0=500000 y_0=0 +no_defs <> + +# 5102: hawaii 2: nad83 +<5102> proj=tmerc datum=NAD83 +lon_0=-156d40 lat_0=20d20 k=.9999666666666667 +x_0=500000 y_0=0 +no_defs <> + +# 5103: hawaii 3: nad83 +<5103> proj=tmerc datum=NAD83 +lon_0=-158 lat_0=21d10 k=.99999 +x_0=500000 y_0=0 +no_defs <> + +# 5104: hawaii 4: nad83 +<5104> proj=tmerc datum=NAD83 +lon_0=-159d30 lat_0=21d50 k=.99999 +x_0=500000 y_0=0 +no_defs <> + +# 5105: hawaii 5: nad83 +<5105> proj=tmerc datum=NAD83 +lon_0=-160d10 lat_0=21d40 k=1 +x_0=500000 y_0=0 +no_defs <> + +# 1101: idaho east: nad83 +<1101> proj=tmerc datum=NAD83 +lon_0=-112d10 lat_0=41d40 k=.9999473684210526 +x_0=200000 y_0=0 +no_defs <> + +# 1102: idaho central: nad83 +<1102> proj=tmerc datum=NAD83 +lon_0=-114 lat_0=41d40 k=.9999473684210526 +x_0=500000 y_0=0 +no_defs <> + +# 1103: idaho west: nad83 +<1103> proj=tmerc datum=NAD83 +lon_0=-115d45 lat_0=41d40 k=.9999333333333333 +x_0=800000 y_0=0 +no_defs <> + +# 1201: illinois east: nad83 +<1201> proj=tmerc datum=NAD83 +lon_0=-88d20 lat_0=36d40 k=.999975 +x_0=300000 y_0=0 +no_defs <> + +# 1202: illinois west: nad83 +<1202> proj=tmerc datum=NAD83 +lon_0=-90d10 lat_0=36d40 k=.9999411764705882 +x_0=700000 y_0=0 +no_defs <> + +# 1301: indiana east: nad83 +<1301> proj=tmerc datum=NAD83 +lon_0=-85d40 lat_0=37d30 k=.9999666666666667 +x_0=100000 y_0=250000 +no_defs <> + +# 1302: indiana west: nad83 +<1302> proj=tmerc datum=NAD83 +lon_0=-87d5 lat_0=37d30 k=.9999666666666667 +x_0=900000 y_0=250000 +no_defs <> + +# 1401: iowa north: nad83 +<1401> proj=lcc datum=NAD83 +lon_0=-93d30 lat_1=43d16 lat_2=42d4 lat_0=41d30 +x_0=1500000 y_0=1000000 +no_defs <> + +# 1402: iowa south: nad83 +<1402> proj=lcc datum=NAD83 +lon_0=-93d30 lat_1=41d47 lat_2=40d37 lat_0=40 +x_0=500000 y_0=0 +no_defs <> + +# 1501: kansas north: nad83 +<1501> proj=lcc datum=NAD83 +lon_0=-98 lat_1=39d47 lat_2=38d43 lat_0=38d20 +x_0=400000 y_0=0 +no_defs <> + +# 1502: kansas south: nad83 +<1502> proj=lcc datum=NAD83 +lon_0=-98d30 lat_1=38d34 lat_2=37d16 lat_0=36d40 +x_0=400000 y_0=400000 +no_defs <> + +# 1601: kentucky north: nad83 +<1601> proj=lcc datum=NAD83 +lon_0=-84d15 lat_1=38d58 lat_2=37d58 lat_0=37d30 +x_0=500000 y_0=0 +no_defs <> + +# 1602: kentucky south: nad83 +<1602> proj=lcc datum=NAD83 +lon_0=-85d45 lat_1=37d56 lat_2=36d44 lat_0=36d20 +x_0=500000 y_0=500000 +no_defs <> + +# 1701: louisiana north: nad83 +<1701> proj=lcc datum=NAD83 +lon_0=-92d30 lat_1=32d40 lat_2=31d10 lat_0=30d30 +x_0=1000000 y_0=0 +no_defs <> + +# 1702: louisiana south: nad83 +<1702> proj=lcc datum=NAD83 +lon_0=-91d20 lat_1=30d42 lat_2=29d18 lat_0=28d30 +x_0=1000000 y_0=0 +no_defs <> + +# 1703: louisiana offshore: nad83 +<1703> proj=lcc datum=NAD83 +lon_0=-91d20 lat_1=27d50 lat_2=26d10 lat_0=25d30 +x_0=1000000 y_0=0 +no_defs <> + +# 1801: maine east: nad83 +<1801> proj=tmerc datum=NAD83 +lon_0=-68d30 lat_0=43d40 k=.9999 +x_0=300000 y_0=0 +no_defs <> + +# 1802: maine west: nad83 +<1802> proj=tmerc datum=NAD83 +lon_0=-70d10 lat_0=42d50 k=.9999666666666667 +x_0=900000 y_0=0 +no_defs <> + +# 1900: maryland ---: nad83 +<1900> proj=lcc datum=NAD83 +lon_0=-77 lat_1=39d27 lat_2=38d18 lat_0=37d40 +x_0=400000 y_0=0 +no_defs <> + +# 2001: massachusetts mainland: nad83 +<2001> proj=lcc datum=NAD83 +lon_0=-71d30 lat_1=42d41 lat_2=41d43 lat_0=41 +x_0=200000 y_0=750000 +no_defs <> + +# 2002: massachusetts island: nad83 +<2002> proj=lcc datum=NAD83 +lon_0=-70d30 lat_1=41d29 lat_2=41d17 lat_0=41 +x_0=500000 y_0=0 +no_defs <> + +# 2111: michigan north: nad83 +<2111> proj=lcc datum=NAD83 +lon_0=-87 lat_1=47d5 lat_2=45d29 lat_0=44d47 +x_0=8000000 y_0=0 +no_defs <> + +# 2112: michigan central/l: nad83 +<2112> proj=lcc datum=NAD83 +lon_0=-84d22 lat_1=45d42 lat_2=44d11 lat_0=43d19 +x_0=6000000 y_0=0 +no_defs <> + +# 2113: michigan south: nad83 +<2113> proj=lcc datum=NAD83 +lon_0=-84d22 lat_1=43d40 lat_2=42d6 lat_0=41d30 +x_0=4000000 y_0=0 +no_defs <> + +# 2201: minnesota north: nad83 +<2201> proj=lcc datum=NAD83 +lon_0=-93d6 lat_1=48d38 lat_2=47d2 lat_0=46d30 +x_0=800000 y_0=100000 +no_defs <> + +# 2202: minnesota central: nad83 +<2202> proj=lcc datum=NAD83 +lon_0=-94d15 lat_1=47d3 lat_2=45d37 lat_0=45 +x_0=800000 y_0=100000 +no_defs <> + +# 2203: minnesota south: nad83 +<2203> proj=lcc datum=NAD83 +lon_0=-94 lat_1=45d13 lat_2=43d47 lat_0=43 +x_0=800000 y_0=100000 +no_defs <> + +# 2301: mississippi east: nad83 +<2301> proj=tmerc datum=NAD83 +lon_0=-88d50 lat_0=29d30 k=.99995 +x_0=300000 y_0=0 +no_defs <> + +# 2302: mississippi west: nad83 +<2302> proj=tmerc datum=NAD83 +lon_0=-90d20 lat_0=29d30 k=.99995 +x_0=700000 y_0=0 +no_defs <> + +# 2401: missouri east: nad83 +<2401> proj=tmerc datum=NAD83 +lon_0=-90d30 lat_0=35d50 k=.9999333333333333 +x_0=250000 y_0=0 +no_defs <> + +# 2402: missouri central: nad83 +<2402> proj=tmerc datum=NAD83 +lon_0=-92d30 lat_0=35d50 k=.9999333333333333 +x_0=500000 y_0=0 +no_defs <> + +# 2403: missouri west: nad83 +<2403> proj=tmerc datum=NAD83 +lon_0=-94d30 lat_0=36d10 k=.9999411764705882 +x_0=850000 y_0=0 +no_defs <> + +# 2500: montana: nad83 +<2500> proj=lcc datum=NAD83 +lon_0=-109d30 lat_1=49 lat_2=45 lat_0=44d15 +x_0=600000 y_0=0 +no_defs <> + +# 2600: nebraska: nad83 +<2600> proj=lcc datum=NAD83 +lon_0=-100 lat_1=43 lat_2=40 lat_0=39d50 +x_0=500000 y_0=0 +no_defs <> + +# 2701: nevada east: nad83 +<2701> proj=tmerc datum=NAD83 +lon_0=-115d35 lat_0=34d45 k=.9999 +x_0=200000 y_0=8000000 +no_defs <> + +# 2702: nevada central: nad83 +<2702> proj=tmerc datum=NAD83 +lon_0=-116d40 lat_0=34d45 k=.9999 +x_0=500000 y_0=6000000 +no_defs <> + +# 2703: nevada west: nad83 +<2703> proj=tmerc datum=NAD83 +lon_0=-118d35 lat_0=34d45 k=.9999 +x_0=800000 y_0=4000000 +no_defs <> + +# 2800: new hampshire ---: nad83 +<2800> proj=tmerc datum=NAD83 +lon_0=-71d40 lat_0=42d30 k=.9999666666666667 +x_0=300000 y_0=0 +no_defs <> + +# 2900: new jersey ---: nad83 +<2900> proj=tmerc datum=NAD83 +lon_0=-74d30 lat_0=38d50 k=.9999 +x_0=150000 y_0=0 +no_defs <> + +# 3001: new mexico east: nad83 +<3001> proj=tmerc datum=NAD83 +lon_0=-104d20 lat_0=31 k=.9999090909090909 +x_0=165000 y_0=0 +no_defs <> + +# 3002: new mexico central: nad83 +<3002> proj=tmerc datum=NAD83 +lon_0=-106d15 lat_0=31 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 3003: new mexico west: nad83 +<3003> proj=tmerc datum=NAD83 +lon_0=-107d50 lat_0=31 k=.9999166666666667 +x_0=830000 y_0=0 +no_defs <> + +# 3101: new york east: nad83 +<3101> proj=tmerc datum=NAD83 +lon_0=-74d30 lat_0=38d50 k=.9999 +x_0=150000 y_0=0 +no_defs <> + +# 3102: new york central: nad83 +<3102> proj=tmerc datum=NAD83 +lon_0=-76d35 lat_0=40 k=.9999375 +x_0=250000 y_0=0 +no_defs <> + +# 3103: new york west: nad83 +<3103> proj=tmerc datum=NAD83 +lon_0=-78d35 lat_0=40 k=.9999375 +x_0=350000 y_0=0 +no_defs <> + +# 3104: new york long island: nad83 +<3104> proj=lcc datum=NAD83 +lon_0=-74 lat_1=41d2 lat_2=40d40 lat_0=40d10 +x_0=300000 y_0=0 +no_defs <> + +# 3200: north carolina ---: nad83 +<3200> proj=lcc datum=NAD83 +lon_0=-79 lat_1=36d10 lat_2=34d20 lat_0=33d45 +x_0=609601.22 y_0=0 +no_defs <> + +# 3301: north dakota north: nad83 +<3301> proj=lcc datum=NAD83 +lon_0=-100d30 lat_1=48d44 lat_2=47d26 lat_0=47 +x_0=600000 y_0=0 +no_defs <> + +# 3302: north dakota south: nad83 +<3302> proj=lcc datum=NAD83 +lon_0=-100d30 lat_1=47d29 lat_2=46d11 lat_0=45d40 +x_0=600000 y_0=0 +no_defs <> + +# 3401: ohio north: nad83 +<3401> proj=lcc datum=NAD83 +lon_0=-82d30 lat_1=41d42 lat_2=40d26 lat_0=39d40 +x_0=600000 y_0=0 +no_defs <> + +# 3402: ohio south: nad83 +<3402> proj=lcc datum=NAD83 +lon_0=-82d30 lat_1=40d2 lat_2=38d44 lat_0=38 +x_0=600000 y_0=0 +no_defs <> + +# 3501: oklahoma north: nad83 +<3501> proj=lcc datum=NAD83 +lon_0=-98 lat_1=36d46 lat_2=35d34 lat_0=35 +x_0=600000 y_0=0 +no_defs <> + +# 3502: oklahoma south: nad83 +<3502> proj=lcc datum=NAD83 +lon_0=-98 lat_1=35d14 lat_2=33d56 lat_0=33d20 +x_0=600000 y_0=0 +no_defs <> + +# 3601: oregon north: nad83 +<3601> proj=lcc datum=NAD83 +lon_0=-120d30 lat_1=46 lat_2=44d20 lat_0=43d40 +x_0=2500000 y_0=0 +no_defs <> + +# 3602: oregon south: nad83 +<3602> proj=lcc datum=NAD83 +lon_0=-120d30 lat_1=44 lat_2=42d20 lat_0=41d40 +x_0=1500000 y_0=0 +no_defs <> + +# 3701: pennsylvania north: nad83 +<3701> proj=lcc datum=NAD83 +lon_0=-77d45 lat_1=41d57 lat_2=40d53 lat_0=40d10 +x_0=600000 y_0=0 +no_defs <> + +# 3702: pennsylvania south: nad83 +<3702> proj=lcc datum=NAD83 +lon_0=-77d45 lat_1=40d58 lat_2=39d56 lat_0=39d20 +x_0=600000 y_0=0 +no_defs <> + +# 3800: rhode island ---: nad83 +<3800> proj=tmerc datum=NAD83 +lon_0=-71d30 lat_0=41d5 k=.99999375 +x_0=100000 y_0=0 +no_defs <> + +# 3900: south carolina: nad83 +<3900> proj=lcc datum=NAD83 +lon_0=-81 lat_1=34d50 lat_2=32d30 lat_0=31d50 +x_0=609600 y_0=0 +no_defs <> + +# 4001: south dakota north: nad83 +<4001> proj=lcc datum=NAD83 +lon_0=-100 lat_1=45d41 lat_2=44d25 lat_0=43d50 +x_0=600000 y_0=0 +no_defs <> + +# 4002: south dakota south: nad83 +<4002> proj=lcc datum=NAD83 +lon_0=-100d20 lat_1=44d24 lat_2=42d50 lat_0=42d20 +x_0=600000 y_0=0 +no_defs <> + +# 4100: tennessee ---: nad83 +<4100> proj=lcc datum=NAD83 +lon_0=-86 lat_1=36d25 lat_2=35d15 lat_0=34d20 +x_0=600000 y_0=0 +no_defs <> + +# 4201: texas north: nad83 +<4201> proj=lcc datum=NAD83 +lon_0=-101d30 lat_1=36d11 lat_2=34d39 lat_0=34 +x_0=200000 y_0=1000000 +no_defs <> + +# 4202: texas north central: nad83 +<4202> proj=lcc datum=NAD83 +lon_0=-98d30 lat_1=33d58 lat_2=32d8 lat_0=31d40 +x_0=600000 y_0=2000000 +no_defs <> + +# 4203: texas central: nad83 +<4203> proj=lcc datum=NAD83 +lon_0=-100d20 lat_1=31d53 lat_2=30d7 lat_0=29d40 +x_0=700000 y_0=3000000 +no_defs <> + +# 4204: texas south central: nad83 +<4204> proj=lcc datum=NAD83 +lon_0=-99 lat_1=30d17 lat_2=28d23 lat_0=27d50 +x_0=600000 y_0=4000000 +no_defs <> + +# 4205: texas south: nad83 +<4205> proj=lcc datum=NAD83 +lon_0=-98d30 lat_1=27d50 lat_2=26d10 lat_0=25d40 +x_0=300000 y_0=5000000 +no_defs <> + +# 4301: utah north: nad83 +<4301> proj=lcc datum=NAD83 +lon_0=-111d30 lat_1=41d47 lat_2=40d43 lat_0=40d20 +x_0=500000 y_0=1000000 +no_defs <> + +# 4302: utah central: nad83 +<4302> proj=lcc datum=NAD83 +lon_0=-111d30 lat_1=40d39 lat_2=39d1 lat_0=38d20 +x_0=500000 y_0=2000000 +no_defs <> + +# 4303: utah south: nad83 +<4303> proj=lcc datum=NAD83 +lon_0=-111d30 lat_1=38d21 lat_2=37d13 lat_0=36d40 +x_0=500000 y_0=3000000 +no_defs <> + +# 4400: vermont ---: nad83 +<4400> proj=tmerc datum=NAD83 +lon_0=-72d30 lat_0=42d30 k=.9999642857142857 +x_0=500000 y_0=0 +no_defs <> + +# 4501: virginia north: nad83 +<4501> proj=lcc datum=NAD83 +lon_0=-78d30 lat_1=39d12 lat_2=38d2 lat_0=37d40 +x_0=3500000 y_0=2000000 +no_defs <> + +# 4502: virginia south: nad83 +<4502> proj=lcc datum=NAD83 +lon_0=-78d30 lat_1=37d58 lat_2=36d46 lat_0=36d20 +x_0=3500000 y_0=1000000 +no_defs <> + +# 4601: washington north: nad83 +<4601> proj=lcc datum=NAD83 +lon_0=-120d50 lat_1=48d44 lat_2=47d30 lat_0=47 +x_0=500000 y_0=0 +no_defs <> + +# 4602: washington south: nad83 +<4602> proj=lcc datum=NAD83 +lon_0=-120d30 lat_1=47d20 lat_2=45d50 lat_0=45d20 +x_0=500000 y_0=0 +no_defs <> + +# 4701: west virginia north: nad83 +<4701> proj=lcc datum=NAD83 +lon_0=-79d30 lat_1=40d15 lat_2=39 lat_0=38d30 +x_0=600000 y_0=0 +no_defs <> + +# 4702: west virginia south: nad83 +<4702> proj=lcc datum=NAD83 +lon_0=-81 lat_1=38d53 lat_2=37d29 lat_0=37 +x_0=600000 y_0=0 +no_defs <> + +# 4801: wisconsin north: nad83 +<4801> proj=lcc datum=NAD83 +lon_0=-90 lat_1=46d46 lat_2=45d34 lat_0=45d10 +x_0=600000 y_0=0 +no_defs <> + +# 4802: wisconsin central: nad83 +<4802> proj=lcc datum=NAD83 +lon_0=-90 lat_1=45d30 lat_2=44d15 lat_0=43d50 +x_0=600000 y_0=0 +no_defs <> + +# 4803: wisconsin south: nad83 +<4803> proj=lcc datum=NAD83 +lon_0=-90 lat_1=44d4 lat_2=42d44 lat_0=42 +x_0=600000 y_0=0 +no_defs <> + +# 4901: wyoming east: nad83 +<4901> proj=tmerc datum=NAD83 +lon_0=-105d10 lat_0=40d30 k=.9999375 +x_0=200000 y_0=0 +no_defs <> + +# 4902: wyoming east central: nad83 +<4902> proj=tmerc datum=NAD83 +lon_0=-107d20 lat_0=40d30 k=.9999375 +x_0=400000 y_0=100000 +no_defs <> + +# 4903: wyoming west central: nad83 +<4903> proj=tmerc datum=NAD83 +lon_0=-108d45 lat_0=40d30 k=.9999375 +x_0=600000 y_0=0 +no_defs <> + +# 4904: wyoming west: nad83 +<4904> proj=tmerc datum=NAD83 +lon_0=-110d5 lat_0=40d30 k=.9999375 +x_0=800000 y_0=100000 +no_defs <> + +# 5001: alaska zone no. 1: nad83 +<5001> proj=omerc datum=NAD83 +k=.9999 lonc=-133d40 lat_0=57 alpha=-36d52'11.6315 +x_0=818676.7344011233 y_0=575097.6888751927 +no_defs <> + +# 5002: alaska zone no. 2: nad83 +<5002> proj=tmerc datum=NAD83 +lon_0=-142 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5003: alaska zone no. 3: nad83 +<5003> proj=tmerc datum=NAD83 +lon_0=-146 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5004: alaska zone no. 4: nad83 +<5004> proj=tmerc datum=NAD83 +lon_0=-150 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5005: alaska zone no. 5: nad83 +<5005> proj=tmerc datum=NAD83 +lon_0=-154 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5006: alaska zone no. 6: nad83 +<5006> proj=tmerc datum=NAD83 +lon_0=-158 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5007: alaska zone no. 7: nad83 +<5007> proj=tmerc datum=NAD83 +lon_0=-162 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5008: alaska zone no. 8: nad83 +<5008> proj=tmerc datum=NAD83 +lon_0=-166 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5009: alaska zone no. 9: nad83 +<5009> proj=tmerc datum=NAD83 +lon_0=-170 lat_0=54 k=.9999 +x_0=500000 y_0=0 +no_defs <> + +# 5200: puerto rico and virgin islands: nad83 +<5200> proj=lcc datum=NAD83 +lon_0=-66d26 lat_1=18d26 lat_2=18d2 lat_0=17d50 +x_0=200000 y_0=200000 +no_defs <> + diff --git a/proj4/nad/ntf_r93.gsb b/proj4/nad/ntf_r93.gsb new file mode 100644 index 000000000000..07e34fcb0279 Binary files /dev/null and b/proj4/nad/ntf_r93.gsb differ diff --git a/proj4/nad/ntv1_can.dat b/proj4/nad/ntv1_can.dat new file mode 100644 index 000000000000..8acad0773ed0 Binary files /dev/null and b/proj4/nad/ntv1_can.dat differ diff --git a/proj4/nad/ntv2_out.dist b/proj4/nad/ntv2_out.dist new file mode 100644 index 000000000000..5ce26e6e4223 --- /dev/null +++ b/proj4/nad/ntv2_out.dist @@ -0,0 +1,11 @@ +############################################################## +Point in the ONwinsor subgrid. +82d00'00.000"W 42d00'00.000"N 0.0 81d59'59.6104"W 42d0'0.1602"N 0.000 +82d00'01.000"W 42d00'00.000"N 0.0 82d0'0.6104"W 42d0'0.1602"N 0.000 +82d00'02.000"W 42d00'00.000"N 0.0 82d0'1.6104"W 42d0'0.1602"N 0.000 +84d00'00.000"W 42d00'00.000"N 0.0 83d59'59.8593"W 42d0'0.18"N 0.000 +############################################################## +Try with NTv2 and NTv1 together ... falls back to NTv1 +99d00'00.000"W 65d00'00.000"N 0.0 99d0'1.5885"W 65d0'1.3482"N 0.000 +111d00'00.000"W 46d00'00.000"N 0.0 111d0'3.1549"W 45d59'59.7528"N 0.000 +111d00'00.000"W 47d30'00.000"N 0.0 111d0'2.7989"W 47d29'59.9896"N 0.000 diff --git a/proj4/nad/null.lla b/proj4/nad/null.lla new file mode 100644 index 000000000000..eb25285aac28 --- /dev/null +++ b/proj4/nad/null.lla @@ -0,0 +1,5 @@ +Null transform for whole world + 3 3 1 -180.00000 180.00000 -90.00000 90.00000 +0: 0 0 0 0 0 0 +1: 0 0 0 0 0 0 +2: 0 0 0 0 0 0 diff --git a/proj4/nad/nzgd2kgrid0005.gsb b/proj4/nad/nzgd2kgrid0005.gsb new file mode 100644 index 000000000000..840bd0063a51 Binary files /dev/null and b/proj4/nad/nzgd2kgrid0005.gsb differ diff --git a/proj4/nad/other.extra b/proj4/nad/other.extra new file mode 100644 index 000000000000..39c27e2736ff --- /dev/null +++ b/proj4/nad/other.extra @@ -0,0 +1,53 @@ +## NAD83 / BC Albers (this has been superceeded but is kept for compatibility) +<42102> +proj=aea +ellps=GRS80 +lat_0=45 +lon_0=-126.0 +lat_1=50.0 +lat_2=58.5 +x_0=1000000.0 +y_0=0 +datum=NAD83 +units=m no_defs <> + + +# +# OGC-defined extended codes (41000--41999) +# see http://www.digitalearth.gov/wmt/auto.html +# +# WGS84 / Simple Mercator +<41001> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# +# CubeWerx-defined extended codes (42100--42199) +# +# WGS 84 / LCC Canada +<42101> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=-8000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +#EPSG:42102,"PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS_1980\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"Decimal_Degree\",0.0174532925199433]],PROJECTION[\"Albers_conic_equal_area\"],PARAMETER[\"central_meridian\",-126.0],PARAMETER[\"latitude_of_origin\",45],PARAMETER[\"standard_parallel_1\",50.0],PARAMETER[\"standard_parallel_2\",58.5],PARAMETER[\"false_easting\",1000000.0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]" +# WGS 84 / LCC USA +<42103> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=0 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS72 +datum=WGS84 +units=m +no_defs no_defs <> +# NAD83 / MTM zone 8 Québec +<42104> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> +# WGS84 / Merc NorthAm +<42105> +proj=merc +lat_ts=0 +lon_0=-96 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> +# WGS84 / Lambert Azim Mozambique +<42106> +proj=laea +lat_0=5 +lon_0=20 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +datum=WGS84 +units=m +no_defs no_defs <> +# +# CubeWerx-customer definitions (42300--42399) +# +# NAD27 / Polar Stereographic / CM=-98 +<42301> +proj=stere +lat_0=90 +lon_0=-98 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> +# JapanOrtho.09 09 +<42302> +proj=tmerc +lat_0=36 +lon_0=139.833333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> +# NAD83 / Albers NorthAm +<42303> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / NRCan LCC Canada +<42304> +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 no_defs <> +# France_II +<42305> +proj=lcc +lat_1=45.898918964419 +lat_2=47.696014502038 +lat_0=46.8 +lon_0=2.337229166666667 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +pm=2.337229166666667 +units=m +no_defs no_defs <> +# NAD83/QC_LCC +<42306> +proj=lcc +lat_1=46 +lat_2=60 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# NAD83 / Texas Central - feet +<42307> +proj=lcc +lat_1=31.8833333333333 +lat_2=30.1166666666667 +lat_0=29.6666666666667 +lon_0=-100.333333333333 +x_0=700000.0000000001 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> +# NAD27 / California Albers +<42308> +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 no_defs <> +# NAD 83 / LCC Canada AVHRR-2 +<42309> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=0 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# WGS84+GRS80 / Mercator +<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/proj4/nad/pj_out27.dist b/proj4/nad/pj_out27.dist new file mode 100644 index 000000000000..632dfc62be69 --- /dev/null +++ b/proj4/nad/pj_out27.dist @@ -0,0 +1,265 @@ + -134d00'00.000 55d00'00.000 2615716.535 1156768.938 2615716.535 1156768.938 AK 1 GP1 + -133d40'00.000 57d00'00.000 2685642.815 1887198.473 2685642.815 1887198.473 AK 1 GP2 + -131d35'45.432 54d39'02.654 3124247.971 1035731.647 3124247.971 1035731.647 AK 1 GP3 + -129d32'30.000 54d32'30.000 3561180.429 1015414.284 3561180.429 1015414.284 AK 1 GP4 + -141d30'00.000 60d30'00.000 1275974.313 3248584.184 1275974.313 3248584.184 AK 1 GP6 + -142d00'00.000 56d30'30.000 500000.000 916085.508 500000.000 916085.508 AK 2 GP1 + -146d00'00.000 56d30'30.000 500000.000 916085.508 500000.000 916085.508 AK 3 GP1 + -150d00'00.000 56d30'30.000 500000.000 916085.508 500000.000 916085.508 AK 4 GP1 + -152d28'56.134 60d53'28.765 770312.640 2520850.030 770312.640 2520850.031 AK 5 GP1 + -154d00'00.000 56d30'30.000 500000.000 916085.508 500000.000 916085.508 AK 5 GP2 + -155d00'00.000 71d00'00.000 857636.168 6224356.319 857636.168 6224356.320 AK 6 GP1 + -158d00'00.000 71d00'00.000 500000.000 6215501.077 500000.000 6215501.078 AK 6 GP1 + -162d00'00.000 65d15'00.000 700000.000 4111525.685 700000.000 4111525.687 AK 7 GP1 + -166d00'00.000 65d15'00.000 500000.000 4111525.685 500000.000 4111525.687 AK 8 GP1 + -170d00'00.000 63d20'00.000 600000.000 3410550.007 600000.000 3410550.008 AK 9 GP1 + -164d02'30.000 54d27'30.000 5533424.392 1473805.123 5533424.392 1473805.123 AK10 GP1 + -176d00'00.000 52d30'00.000 3000000.000 547583.333 3000000.000 547583.333 AK10 GP2 + -85d50'00.000 31d20'00.000 500000.000 303093.746 500000.000 303093.746 AL E GP1 + -85d12'41.738 32d38'57.737 691376.573 782394.791 691376.573 782394.791 AL E GP2 + -86d36'58.670 34d48'58.708 264979.900 1571249.667 264979.900 1571249.667 AL E GP3 + -87d30'00.000 33d20'00.000 500000.000 1212487.425 500000.000 1212487.425 AL W GP1 + -87d30'00.000 33d20'30.000 500000.000 1215519.455 500000.000 1215519.455 AL W GP2 + -91d34'46.321 35d18'37.443 2125448.748 355890.988 2125448.748 355890.988 AR N GP1 + -92d04'11.625 35d19'34.269 1979150.162 361375.766 1979150.162 361375.766 AR N GP2 + -92d00'00.000 34d45'00.000 2000000.000 758096.040 2000000.000 758096.040 AR S GP1 + -92d00'00.000 33d15'00.000 2000000.000 212263.845 2000000.000 212263.845 AR S GP2 + -170d00'00.000 -14d16'00.000 500000.000 312234.650 500000.000 312234.650 AS GP1 + -166d50'38.406 -9d34'41.556 1640416.676 2007870.029 1640416.676 2007870.029 AS GP2 + -111d55'00.000 34d45'00.000 500000.000 1364267.386 500000.000 1364267.386 AZ C GP1 + -111d55'00.000 32d20'00.000 500000.000 484978.270 500000.000 484978.270 AZ C GP2 + -110d24'59.771 35d09'58.568 425301.125 1515853.425 425301.125 1515853.426 AZ E GP1 + -109d34'33.127 31d59'53.103 683147.830 363527.538 683147.830 363527.538 AZ E GP2 + -110d30'34.948 35d07'28.243 397422.297 1500739.241 397422.297 1500739.241 AZ E GP3 + -109d45'13.226 32d08'41.778 627823.092 416691.532 627823.092 416691.532 AZ E GP4 + -113d45'00.000 34d45'00.000 500000.000 1364312.866 500000.000 1364312.866 AZ W GP1 + -113d45'00.000 34d45'30.000 500000.000 1367345.603 500000.000 1367345.603 AZ W GP2 + -113d45'00.000 34d46'00.000 500000.000 1370378.345 500000.000 1370378.345 AZ W GP3 + -122d00'00.000 41d30'00.000 2000000.000 789314.699 2000000.000 789314.699 CA 1 GP1 + -122d00'00.000 41d30'30.000 2000000.000 792351.052 2000000.000 792351.052 CA 1 GP2 + -122d00'00.000 39d20'00.000 2000000.000 606975.074 2000000.000 606975.074 CA 2 GP1 + -122d00'00.000 39d20'30.000 2000000.000 610010.158 2000000.000 610010.158 CA 2 GP2 + -120d30'00.000 37d05'00.000 2000000.000 212394.029 2000000.000 212394.029 CA 3 GP1 + -121d22'26.019 37d30'30.324 1746516.910 368350.900 1746516.910 368350.900 CA 3 GP2 + -119d46'32.733 37d07'41.470 2211146.746 229541.692 2211146.746 229541.692 CA 3 GP3 + -119d38'26.434 36d55'48.009 2251190.696 157720.169 2251190.696 157720.169 CA 3 GP4 + -120d42'59.779 38d06'52.815 1937681.203 587984.757 1937681.203 587984.757 CA 3 GP5 + -119d00'00.000 36d20'00.000 2000000.000 364036.106 2000000.000 364036.106 CA 4 GP1 + -119d00'00.000 36d20'30.000 2000000.000 367069.711 2000000.000 367069.711 CA 4 GP2 + -118d00'00.000 34d45'00.000 2000000.000 454894.032 2000000.000 454894.032 CA 5 GP1 + -118d00'00.000 34d45'30.000 2000000.000 457926.735 2000000.000 457926.735 CA 5 GP2 + -116d15'00.000 33d20'00.000 2000000.000 424481.703 2000000.000 424481.703 CA 6 GP1 + -116d15'00.000 33d20'30.000 2000000.000 427513.796 2000000.000 427513.796 CA 6 GP2 + -118d20'00.000 34d30'00.000 4186692.580 4294365.712 4186692.580 4294365.712 CA 7 GP1 + -105d30'00.000 39d15'00.000 2000000.000 515936.228 2000000.000 515936.228 CO C GP1 + -105d30'00.000 39d15'30.000 2000000.000 518971.313 2000000.000 518971.313 CO C GP2 + -108d45'55.378 40d25'33.504 1091086.832 414752.176 1091086.832 414752.176 CO N GP1 + -105d14'45.588 40d12'42.711 2070940.652 320120.166 2070940.652 320120.166 CO N GP2 + -105d30'00.000 37d30'00.000 2000000.000 303425.100 2000000.000 303425.100 CO S GP1 + -105d30'00.000 37d30'30.000 2000000.000 306459.335 2000000.000 306459.335 CO S GP2 + -72d43'30.515 41d16'55.847 606832.139 163540.219 606832.139 163540.219 CT GP1 + -73d01'15.609 41d13'25.985 525446.203 142415.891 525446.203 142415.891 CT GP2 + -75d33'00.748 39d21'15.214 462235.881 493228.846 462235.881 493228.846 DE GP1 + -75d19'01.889 39d45'14.765 527969.596 638870.822 527969.596 638870.822 DE GP2 + -80d11'00.000 25d45'00.000 768810.056 515637.939 768810.056 515637.939 FL E GP1 + -82d45'52.412 29d39'06.589 2551254.254 241240.008 2551254.254 241240.008 FL N GP1 + -84d55'11.533 29d38'51.982 1866620.008 235814.655 1866620.008 235814.655 FL N GP2 + -82d38'00.000 27d47'00.000 295216.148 1254408.638 295216.148 1254408.638 FL W GP1 + -81d27'15.592 32d38'03.003 719287.314 958818.262 719287.314 958818.262 GA E GP1 + -83d15'39.990 33d29'58.626 166361.311 1274706.363 166361.311 1274706.363 GA E GP2 + -84d23'00.000 33d45'00.000 434141.824 1364117.672 434141.824 1364117.672 GA W GP1 + 144d44'55.503 13d28'20.879 164041.712 164041.680 164041.712 164041.680 GU GP1 + 144d38'07.193 13d20'20.538 123728.401 115623.086 123728.401 115623.086 GU GP2 + -155d59'16.911 19d37'23.477 332050.939 287068.342 332050.939 287068.342 HI 1 GP1 + -155d18'06.262 19d31'24.578 568270.061 250663.241 568270.061 250663.241 HI 1 GP2 + -155d30'00.000 19d42'00.000 500000.000 314722.985 500000.000 314722.985 HI 1 GP3 + -155d30'00.000 19d42'30.000 500000.000 317749.315 500000.000 317749.315 HI 1 GP4 + -156d40'00.000 20d42'00.000 500000.000 133170.903 500000.000 133170.903 HI 2 GP1 + -156d40'00.000 20d42'30.000 500000.000 136197.580 500000.000 136197.580 HI 2 GP2 + -158d00'00.000 21d30'00.000 500000.000 121078.981 500000.000 121078.981 HI 3 GP1 + -158d01'30.000 21d37'30.000 491508.215 166485.537 491508.215 166485.537 HI 3 GP2 + -159d30'00.000 22d05'00.000 500000.000 90816.138 500000.000 90816.138 HI 4 GP1 + -160d10'00.000 21d42'00.000 500000.000 12108.532 500000.000 12108.532 HI 5 GP1 + -93d28'33.966 42d44'50.101 2006419.316 454523.076 2006419.316 454523.076 IA N GP1 + -93d54'22.084 42d40'23.699 1890779.351 427816.212 1890779.351 427816.212 IA N GP2 + -93d37'00.000 41d35'00.000 1968081.762 576880.709 1968081.762 576880.709 IA S GP1 + -114d24'00.000 42d56'00.000 392878.009 461838.231 392878.009 461838.231 ID C GP1 + -111d42'29.824 43d48'07.616 621017.480 778569.749 621017.480 778569.749 ID E GP1 + -112d22'35.516 43d35'26.260 444398.356 701217.958 444398.356 701217.958 ID E GP2 + -116d22'02.592 48d07'50.941 349231.302 2357247.272 349231.302 2357247.272 ID W GP1 + -88d07'06.790 41d46'11.855 558591.507 1858801.531 558591.507 1858801.531 IL E GP1 + -88d41'35.208 40d43'37.202 400279.755 1478930.010 400279.755 1478930.010 IL E GP2 + -90d10'00.000 38d30'00.000 500000.000 667527.020 500000.000 667527.020 IL W GP1 + -85d40'00.000 40d00'00.000 500000.000 910470.785 500000.000 910470.786 IN E GP1 + -85d40'00.000 40d00'30.000 500000.000 913506.350 500000.000 913506.351 IN E GP2 + -86d14'27.780 40d00'12.690 339087.973 912273.324 339087.973 912273.325 IN E GP3 + -86d14'27.790 40d00'31.660 339099.565 914192.836 339099.565 914192.836 IN E GP4 + -86d14'28.103 40d00'47.412 339085.485 915786.883 339085.485 915786.883 IN E GP6 + -87d05'00.000 40d00'00.000 500000.000 910470.785 500000.000 910470.786 IN W GP1 + -87d05'00.000 40d00'30.000 500000.000 913506.350 500000.000 913506.351 IN W GP2 + -86d45'10.717 39d41'24.840 592969.921 797807.077 592969.921 797807.077 IN W GP3 + -87d41'44.075 37d54'24.755 323351.583 148732.658 323351.583 148732.658 IN W GP4 + -86d32'13.179 39d32'46.419 654071.692 745650.467 654071.692 745650.467 IN W GP5 + -87d25'26.675 38d26'17.646 402398.078 341828.410 402398.078 341828.410 IN W GP6 + -86d14'28.103 40d00'47.412 735905.989 916383.007 735905.989 916383.007 IN W GP7 + -86d14'27.780 40d00'12.690 735964.329 912869.812 735964.329 912869.812 IN W GP8 + -86d14'27.790 40d00'31.660 735945.409 914789.331 735945.409 914789.331 IN W GP9 + -96d47'54.567 38d58'52.096 2341555.463 238196.375 2341555.463 238196.375 KS N GP1 + -98d35'23.954 39d58'41.967 1834645.786 599682.614 1834645.786 599682.614 KS N GP2 + -97d21'00.000 37d42'00.000 2332714.529 378302.303 2332714.529 378302.303 KS S GP1 + -84d05'43.283 38d14'35.963 2044414.776 270720.831 2044414.776 270720.831 KY N GP1 + -84d26'49.265 39d04'03.099 1944057.054 570906.807 1944057.054 570906.807 KY N GP2 + -86d05'00.000 37d10'00.000 1902871.440 303569.007 1902871.440 303569.007 KY S GP1 + -91d34'46.483 31d57'26.243 2285456.159 470671.781 2285456.159 470671.781 LA N GP1 + -92d52'46.615 32d54'52.264 1883486.181 817905.853 1883486.181 817905.853 LA N GP2 + -91d29'09.480 31d56'44.721 2314527.078 466735.568 2314527.078 466735.568 LA N GP3 + -93d59'38.241 32d48'43.467 1540965.776 783590.902 1540965.776 783590.902 LA N GP4 + -89d00'00.000 28d50'00.000 2747176.527 68218.410 2747176.527 68218.410 LA S GP1 + -89d30'00.000 28d50'00.000 2587082.796 65307.429 2587082.796 65307.429 LA S GP2 + -89d29'59.999 29d19'59.994 2584173.994 247106.020 2584173.994 247106.020 LA S GP3 + -89d00'00.004 29d19'59.998 2743474.038 250002.972 2743474.038 250002.972 LA S GP4 + -89d10'23.487 29d20'32.615 2688234.966 252215.035 2688234.966 252215.035 LA S GP5 + -89d06'34.632 29d15'19.642 2709099.980 220994.973 2709099.980 220994.973 LA S GP6 + -89d01'33.803 29d07'47.918 2736661.987 175901.967 2736661.987 175901.967 LA S GP7 + -89d08'45.781 28d58'27.979 2699434.976 118600.021 2699434.976 118600.021 LA S GP9 + -70d30'00.000 41d30'00.000 200000.000 182180.613 200000.000 182180.613 MA I GP1 + -70d27'00.716 41d40'15.808 886823.958 246295.510 886823.958 246295.510 MA M GP1 + -73d25'59.173 42d06'06.860 75432.106 407473.253 75432.106 407473.253 MA M GP2 + -76d11'27.492 39d12'06.132 1029272.677 499353.154 1029272.677 499353.154 MD GP1 + -77d02'30.406 38d26'37.492 788033.549 222300.512 788033.549 222300.512 MD GP2 + -77d30'10.460 38d59'25.903 657055.715 421819.661 657055.715 421819.661 MD GP3 + -68d24'25.489 46d32'46.920 523379.868 989125.403 523379.868 989125.403 ME E GP1 + -68d37'29.366 47d02'12.659 468876.638 1168006.571 468876.638 1168006.571 ME E GP2 + -70d16'00.000 43d40'00.000 473538.933 303746.300 473538.933 303746.300 ME W GP1 + -85d40'00.000 44d45'00.000 1653612.784 525406.529 1653612.784 525406.529 MI C GP1 + -83d29'17.919 42d19'19.299 2228532.810 300724.433 2228532.810 300724.433 MI S GP1 + -83d35'24.656 42d20'02.682 2200944.119 304856.048 2200944.119 304856.048 MI S GP2 + -85d55'26.569 41d50'10.236 1566471.427 126614.633 1566471.427 126614.633 MI S GP3 + -85d45'59.490 41d49'22.346 1609315.113 120996.336 1609315.113 120996.336 MI S GP4 + -89d20'00.000 46d50'00.000 353999.488 1944621.410 353999.488 1944621.410 MI W GP1 + -91d27'51.183 47d08'19.177 2407087.310 237254.364 2407087.310 237254.364 MN N GP1 + -95d51'05.998 48d19'26.552 1330690.998 677229.560 1330690.998 677229.560 MN N GP2 + -92d30'00.000 38d15'00.000 500000.000 879833.618 500000.000 879833.618 MO C GP1 + -92d30'00.000 38d15'30.000 500000.000 882868.158 500000.000 882868.158 MO C GP2 + -91d42'04.297 37d22'05.932 150919.587 561018.126 150919.587 561018.127 MO E GP1 + -90d08'08.896 36d53'44.124 606497.861 386893.306 606497.861 386893.306 MO E GP2 + -94d30'00.000 38d15'00.000 500000.000 758504.732 500000.000 758504.732 MO W GP1 + -94d30'00.000 38d15'30.000 500000.000 761539.296 500000.000 761539.296 MO W GP2 + -89d10'14.013 30d30'51.338 393805.810 308399.629 393805.810 308399.629 MS E GP1 + -88d26'04.338 30d43'01.454 625321.316 382224.788 625321.316 382224.788 MS E GP2 + -90d10'00.000 32d17'00.000 551507.962 648697.041 551507.962 648697.041 MS W GP1 + -109d25'00.000 47d05'00.000 2020760.609 455889.692 2020760.609 455889.692 MT C GP1 + -106d29'11.521 47d52'21.103 2739443.845 332808.759 2739443.845 332808.759 MT N GP1 + -114d30'43.122 48d52'46.764 794693.447 725072.329 794693.447 725072.329 MT N GP2 + -109d15'00.000 45d39'00.000 2063931.561 601700.560 2063931.561 601700.560 MT S GP1 + -81d12'31.790 35d09'31.049 1339854.041 519988.737 1339854.041 519988.737 NC GP1 + -76d31'54.918 35d33'51.452 2733941.071 669408.798 2733941.071 669408.798 NC GP2 + -78d28'26.580 36d15'15.480 2155088.262 911860.343 2155088.262 911860.343 NC GP3 + -98d46'03.232 48d08'13.483 2422983.823 419525.823 2422983.823 419525.823 ND N GP1 + -101d18'21.456 47d39'18.935 1801367.700 240053.997 1801367.700 240053.997 ND N GP2 + -100d46'00.000 46d48'00.000 1933213.911 413422.204 1933213.911 413422.204 ND S GP1 + -96d17'52.930 42d04'48.305 3004688.243 293978.208 3004688.243 293978.208 NE N GP1 + -100d49'26.949 41d58'54.025 1775916.042 237340.591 1775916.042 237340.591 NE N GP2 + -96d43'00.000 40d49'00.000 2770252.364 431225.617 2770252.364 431225.617 NE S GP1 + -70d56'11.287 43d08'15.006 694907.496 233185.793 694907.496 233185.793 NH GP1 + -72d32'32.197 42d51'25.984 265213.564 131404.574 265213.564 131404.574 NH GP2 + -74d13'55.737 39d52'02.095 2121971.499 376878.657 2121971.499 376878.657 NJ GP1 + -74d51'24.058 41d12'07.401 1947709.569 862915.876 1947709.569 862915.876 NJ GP2 + -106d15'00.000 33d30'00.000 500000.000 909419.295 500000.000 909419.295 NM C GP1 + -106d15'00.000 33d30'30.000 500000.000 912451.306 500000.000 912451.306 NM C GP2 + -104d11'42.410 33d17'21.732 542236.924 832820.301 542236.924 832820.301 NM E GP1 + -104d47'37.948 33d22'32.349 359406.535 864495.731 359406.535 864495.732 NM E GP2 + -107d50'00.000 32d30'00.000 500000.000 545616.897 500000.000 545616.897 NM W GP1 + -107d50'00.000 32d30'30.000 500000.000 548648.466 500000.000 548648.466 NM W GP2 + -116d48'00.000 36d58'00.000 461048.286 806858.042 461048.286 806858.042 NV C GP1 + -114d49'09.337 35d43'09.299 726805.224 353637.053 726805.224 353637.053 NV E GP1 + -116d50'32.766 41d30'37.869 155162.931 2464191.578 155162.931 2464191.579 NV E GP2 + -119d49'00.000 39d32'00.000 152145.548 1743820.923 152145.548 1743820.924 NV W GP1 + -76d10'00.000 43d05'00.000 611313.134 1123706.620 611313.134 1123706.621 NY C GP1 + -74d02'53.671 42d17'01.775 577147.690 832219.885 577147.690 832219.885 NY E GP1 + -74d44'39.818 42d30'07.382 389148.814 911884.889 389148.814 911884.889 NY E GP2 + -73d02'36.247 40d47'50.624 2264860.626 209793.919 2264860.626 209793.919 NY L GP1 + -74d06'58.125 40d36'07.281 1967746.807 137190.013 1967746.807 137190.013 NY L GP2 + -74d00'00.000 40d45'00.000 2000000.000 191080.202 2000000.000 191080.202 NY L GP3 + -73d15'00.000 40d37'30.000 2208197.581 146431.086 2208197.581 146431.086 NY L GP4 + -73d22'30.000 40d45'00.000 2173173.707 191697.996 2173173.707 191697.996 NY L GP5 + -78d51'00.000 42d54'00.000 428547.567 1056727.674 428547.567 1056727.674 NY W GP1 + -80d49'28.238 40d17'50.894 2467363.986 234305.751 2467363.986 234305.751 OH N GP1 + -82d37'31.021 40d20'14.678 1965071.932 244391.910 1965071.932 244391.910 OH N GP2 + -84d15'00.000 39d45'00.000 1507970.925 642141.152 1507970.925 642141.152 OH S GP1 + -98d42'45.414 36d50'19.568 1791448.615 670119.442 1791448.615 670119.442 OK N GP1 + -95d38'44.046 35d20'36.925 2702176.218 133585.952 2702176.218 133585.952 OK N GP2 + -97d08'00.000 34d34'00.000 2260914.787 449942.599 2260914.787 449942.599 OK S GP1 + -123d41'00.000 45d31'00.000 1184216.898 690530.257 1184216.898 690530.257 OR N GP1 + -119d46'26.562 44d24'25.943 2189746.353 999672.239 2189746.353 999672.239 OR S GP1 + -121d09'56.105 44d23'08.924 1825970.576 991740.899 1825970.576 991740.899 OR S GP2 + -74d33'20.644 41d23'48.566 2876202.339 464358.775 2876202.339 464358.775 PA N GP1 + -78d09'48.121 40d51'35.455 1885652.438 252829.477 1885652.438 252829.477 PA N GP2 + -67d08'56.930 18d29'56.972 251990.753 242253.319 251990.753 242253.319 PR F GP1 + -66d52'30.000 18d15'00.000 346756.548 151479.295 346756.548 151479.295 PR F GP2 + -66d26'00.000 18d15'00.000 500000.000 151294.491 500000.000 151294.491 PR F GP3 + -66d26'00.000 18d30'00.000 500000.000 242074.012 500000.000 242074.012 PR F GP4 + -67d08'56.930 18d29'56.972 251990.753 242253.319 251990.753 242253.319 PR M GP1 + -66d52'30.000 18d15'00.000 346756.548 151479.295 346756.548 151479.295 PR M GP2 + -66d26'00.000 18d15'00.000 500000.000 151294.491 500000.000 151294.491 PR M GP3 + -66d26'00.000 18d30'00.000 500000.000 242074.012 500000.000 242074.012 PR M GP4 + -64d43'00.000 17d40'00.000 1097602.972 42283.509 1097602.972 42283.509 PS S GP1 + -71d16'00.833 41d32'24.848 563817.074 166563.592 563817.074 166563.592 RI GP1 + -71d37'13.730 41d23'53.266 466943.554 114721.079 466943.554 114721.079 RI GP2 + -80d32'30.000 34d32'30.000 2138028.224 561330.721 2138028.224 561330.721 SC N GP1 + -81d00'00.000 34d32'30.000 2000000.000 561019.077 2000000.000 561019.077 SC N GP2 + -80d32'30.000 33d32'30.000 2139661.529 621836.603 2139661.529 621836.603 SC S GP1 + -81d00'00.000 33d32'30.000 2000000.000 621532.356 2000000.000 621532.356 SC S GP2 + -99d12'21.983 44d06'08.121 2208566.880 99065.808 2208566.880 99065.808 SD N GP1 + -100d32'28.873 44d32'34.917 1858852.206 259207.243 1858852.206 259207.243 SD N GP2 + -103d14'00.000 44d06'00.000 1238344.555 657205.595 1238344.555 657205.595 SD S GP1 + -85d13'55.967 36d21'48.503 2226074.895 718522.870 2226074.895 718522.870 TN GP1 + -88d43'05.849 36d30'08.410 1201097.659 779285.593 1201097.659 779285.593 TN GP2 + -97d06'00.000 31d35'00.000 3006704.541 711708.204 3006704.541 711708.204 TX C GP1 + -100d33'06.303 34d39'35.684 2285173.373 241550.390 2285173.373 241550.390 TX N GP1 + -102d48'50.949 34d43'39.249 1605118.921 267430.718 1605118.921 267430.718 TX N GP2 + -97d30'00.000 25d55'00.000 2328727.194 92175.721 2328727.194 92175.721 TX S GP1 + -96d48'00.000 32d45'00.000 2215204.973 394833.169 2215204.973 394833.169 TXNC GP1 + -98d30'00.000 29d25'00.000 2159176.237 576022.948 2159176.237 576022.948 TXSC GP1 + -111d30'00.000 38d40'00.000 2000000.000 121415.345 2000000.000 121415.345 UT C GP1 + -111d30'00.000 38d40'30.000 2000000.000 124450.619 2000000.000 124450.619 UT C GP2 + -111d30'00.000 41d30'00.000 2000000.000 425057.445 2000000.000 425057.445 UT N GP1 + -111d30'00.000 41d30'30.000 2000000.000 428093.810 2000000.000 428093.810 UT N GP2 + -109d48'37.967 38d29'30.877 2483568.472 668988.098 2483568.472 668988.098 UT S GP1 + -113d52'56.922 37d09'18.788 1305706.243 186731.606 1305706.243 186731.606 UT S GP2 + -77d13'46.945 38d55'12.407 2361415.621 458962.786 2361415.621 458962.786 VA N GP1 + -79d18'51.557 38d09'59.020 1765875.433 183017.881 1765875.433 183017.881 VA N GP2 + -77d38'10.823 37d49'23.964 2249484.834 58221.695 2249484.834 58221.695 VA N GP3 + -79d26'19.475 37d47'25.852 1728704.621 46487.604 1728704.621 46487.604 VA N GP4 + -77d44'30.336 39d00'06.804 2215488.016 487135.448 2215488.016 487135.448 VA N GP6 + -77d43'47.013 38d59'55.454 2218917.620 486015.701 2218917.620 486015.701 VA N GP9 + -78d30'00.000 37d30'00.000 2000000.000 424763.516 2000000.000 424763.516 VA S GP1 + -78d30'00.000 37d30'30.000 2000000.000 427797.710 2000000.000 427797.710 VA S GP2 + -77d32'33.000 36d54'42.507 2279939.213 212030.192 2279939.213 212030.192 VA S GP3 + -77d21'55.732 38d04'53.901 2326572.191 638519.064 2326572.191 638519.064 VA S GP4 + -64d45'30.000 17d45'30.000 1082794.001 75432.552 1082794.001 75432.552 VI F GP1 + -66d26'00.000 17d45'56.426 500000.000 75432.505 500000.000 75432.505 VI F GP2 + -64d45'30.000 17d45'30.000 1082794.001 75432.552 1082794.001 75432.552 VI M GP1 + -66d26'00.000 17d45'56.426 500000.000 75432.505 500000.000 75432.505 VI M GP2 + -72d29'31.418 43d09'58.526 502118.227 242816.621 502118.227 242816.621 VT GP1 + -73d12'06.978 44d22'22.810 316451.963 683472.660 316451.963 683472.660 VT GP2 + -119d51'37.006 47d50'51.069 2238927.196 310658.148 2238927.196 310658.148 WA N GP1 + -123d59'49.087 48d09'29.131 1228043.506 438306.777 1228043.506 438306.777 WA N GP2 + -122d54'00.000 46d09'00.000 1391814.257 307059.945 1391814.257 307059.945 WA S GP1 + -88d04'00.000 44d30'00.000 2504399.560 249042.105 2504399.560 249042.105 WI C GP1 + -88d44'40.778 45d22'21.598 2322632.765 77666.151 2322632.765 77666.151 WI N GP1 + -92d12'19.275 45d48'35.812 1437681.450 242373.846 1437681.450 242373.846 WI N GP2 + -89d23'00.000 43d05'00.000 2164743.544 395445.420 2164743.544 395445.420 WI S GP1 + -77d53'39.269 39d14'39.339 2454764.840 275139.246 2454764.840 275139.246 WV N GP1 + -81d33'23.549 39d18'08.535 1418073.862 298900.611 1418073.862 298900.611 WV N GP2 + -77d30'10.460 38d59'25.903 2567632.286 184970.946 2567632.286 184970.946 WV N GP3 + -105d07'00.000 44d38'00.000 513016.009 1445570.354 513016.009 1445570.355 WY E GP1 + -105d31'02.882 43d30'40.600 406937.677 1036750.417 406937.677 1036750.418 WY E GP1 + -105d22'42.856 43d30'14.685 443778.141 1034002.062 443778.141 1034002.062 WY E GP2 + -105d28'42.827 43d36'33.391 417392.389 1072428.186 417392.389 1072428.186 WY E GP3 + -105d23'43.223 42d00'59.422 437860.186 491889.060 437860.186 491889.060 WY E GP4 + -104d35'06.686 42d34'50.366 656606.905 697923.643 656606.905 697923.643 WY E GP5 + -110d36'00.000 41d48'00.000 359125.204 413338.815 359125.204 413338.815 WY W GP1 + -106d13'03.224 41d36'14.640 805153.891 343496.745 805153.891 343496.746 WYEC GP1 + -108d01'56.720 41d51'57.518 309581.204 437731.262 309581.204 437731.262 WYEC GP2 + -108d24'00.000 43d02'00.000 593579.361 862553.590 593579.361 862553.590 WYWC GP1 diff --git a/proj4/nad/pj_out83.dist b/proj4/nad/pj_out83.dist new file mode 100644 index 000000000000..726140f36ec0 --- /dev/null +++ b/proj4/nad/pj_out83.dist @@ -0,0 +1,225 @@ + -134d00'00.000 55d00'00.000 2616018.154 1156379.643 2616018.154 1156379.643 AK 1 GP1 + -133d40'00.000 57d00'00.000 2685941.919 1886799.668 2685941.919 1886799.668 AK 1 GP2 + -131d35'45.432 54d39'02.654 3124531.426 1035343.511 3124531.426 1035343.511 AK 1 GP3 + -129d32'30.000 54d32'30.000 3561448.345 1015025.876 3561448.345 1015025.876 AK 1 GP4 + -141d30'00.000 60d30'00.000 1276328.587 3248159.207 1276328.587 3248159.207 AK 1 GP6 + -142d00'00.000 56d30'30.000 1640416.667 916074.824 1640416.667 916074.825 AK 2 GP1 + -146d00'00.000 56d30'30.000 1640416.667 916074.824 1640416.667 916074.825 AK 3 GP1 + -150d00'00.000 56d30'30.000 1640416.667 916074.824 1640416.667 916074.825 AK 4 GP1 + -152d28'56.134 60d53'28.765 1910718.662 2520810.679 1910718.662 2520810.680 AK 5 GP1 + -154d00'00.000 56d30'30.000 1640416.667 916074.824 1640416.667 916074.825 AK 5 GP2 + -155d00'00.000 71d00'00.000 1998036.998 6224208.215 1998036.998 6224208.217 AK 6 GP1 + -158d00'00.000 71d00'00.000 1640416.667 6215353.365 1640416.667 6215353.367 AK 6 GP1 + -162d00'00.000 65d15'00.000 1640416.667 4111446.440 1640416.667 4111446.441 AK 7 GP1 + -166d00'00.000 65d15'00.000 1640416.667 4111446.440 1640416.667 4111446.441 AK 8 GP1 + -170d00'00.000 63d20'00.000 1640416.667 3410489.716 1640416.667 3410489.717 AK 9 GP1 + -164d02'30.000 54d27'30.000 5814167.604 1473788.834 5814167.604 1473788.834 AK10 GP1 + -176d00'00.000 52d30'00.000 3280833.333 547580.542 3280833.333 547580.542 AK10 GP2 + -85d50'00.000 31d20'00.000 656166.667 303104.183 656166.667 303104.183 AL E GP1 + -85d12'41.738 32d38'57.737 847539.085 782420.807 847539.085 782420.807 AL E GP2 + -86d36'58.670 34d48'58.708 421151.975 1571298.908 421151.975 1571298.908 AL E GP3 + -87d30'00.000 33d20'00.000 1968500.000 1212527.586 1968500.000 1212527.587 AL W GP1 + -87d30'00.000 33d20'30.000 1968500.000 1215559.708 1968500.000 1215559.708 AL W GP2 + -91d34'46.321 35d18'37.443 1437779.156 355900.759 1437779.156 355900.759 AR N GP1 + -92d04'11.625 35d19'34.269 1291483.982 361385.695 1291483.982 361385.695 AR N GP2 + -92d00'00.000 34d45'00.000 1312333.333 2070451.744 1312333.333 2070451.744 AR S GP1 + -92d00'00.000 33d15'00.000 1312333.333 1524603.730 1312333.333 1524603.730 AR S GP2 + -111d55'00.000 34d45'00.000 699998.600 1364309.666 699998.600 1364309.666 AZ C GP1 + -111d55'00.000 32d20'00.000 699998.600 484994.340 699998.600 484994.340 AZ C GP2 + -110d24'59.771 35d09'58.568 625301.460 1515899.830 625301.460 1515899.830 AZ E GP1 + -109d34'33.127 31d59'53.103 883142.524 363539.663 883142.524 363539.663 AZ E GP2 + -110d30'34.948 35d07'28.243 597423.277 1500785.234 597423.277 1500785.235 AZ E GP3 + -109d45'13.226 32d08'41.778 827818.955 416705.394 827818.955 416705.394 AZ E GP4 + -113d45'00.000 34d45'00.000 699998.600 1364355.147 699998.600 1364355.147 AZ W GP1 + -113d45'00.000 34d45'30.000 699998.600 1367387.968 699998.600 1367387.968 AZ W GP2 + -113d45'00.000 34d46'00.000 699998.600 1370420.793 699998.600 1370420.793 AZ W GP3 + -122d00'00.000 41d30'00.000 6561666.667 2429744.729 6561666.667 2429744.729 CA 1 GP1 + -122d00'00.000 41d30'30.000 6561666.667 2432781.128 6561666.667 2432781.128 CA 1 GP2 + -122d00'00.000 39d20'00.000 6561666.667 2247404.250 6561666.667 2247404.250 CA 2 GP1 + -122d00'00.000 39d20'30.000 6561666.667 2250439.391 6561666.667 2250439.391 CA 2 GP2 + -120d30'00.000 37d05'00.000 6561666.667 1852815.760 6561666.667 1852815.760 CA 3 GP1 + -121d22'26.019 37d30'30.324 6308189.835 2008776.145 6308189.835 2008776.145 CA 3 GP2 + -119d46'32.733 37d07'41.470 6772808.251 1869963.783 6772808.251 1869963.783 CA 3 GP3 + -119d38'26.434 36d55'48.009 6812851.254 1798140.563 6812851.254 1798140.563 CA 3 GP4 + -120d42'59.779 38d06'52.815 6499349.432 2228414.867 6499349.432 2228414.867 CA 3 GP5 + -119d00'00.000 36d20'00.000 6561666.667 2004462.102 6561666.667 2004462.102 CA 4 GP1 + -119d00'00.000 36d20'30.000 6561666.667 2007495.782 6561666.667 2007495.782 CA 4 GP2 + -118d00'00.000 34d45'00.000 6561666.667 2095323.781 6561666.667 2095323.781 CA 5 GP1 + -118d00'00.000 34d45'30.000 6561666.667 2098356.568 6561666.667 2098356.568 CA 5 GP2 + -116d15'00.000 33d20'00.000 6561666.667 2064911.626 6561666.667 2064911.626 CA 6 GP1 + -116d15'00.000 33d20'30.000 6561666.667 2067943.810 6561666.667 2067943.810 CA 6 GP2 + -118d20'00.000 34d30'00.000 5933874.572 2495758.727 5933874.572 2495758.727 CA 7 GP1 + -105d30'00.000 39d15'00.000 3000000.000 1515946.820 3000000.000 1515946.820 CO C GP1 + -105d30'00.000 39d15'30.000 3000000.000 1518981.963 3000000.000 1518981.963 CO C GP2 + -108d45'55.378 40d25'33.504 2091110.958 1414758.884 2091110.958 1414758.884 CO N GP1 + -105d14'45.588 40d12'42.711 3070938.779 1320125.979 3070938.779 1320125.979 CO N GP2 + -105d30'00.000 37d30'00.000 3000000.000 1303432.168 3000000.000 1303432.168 CO S GP1 + -105d30'00.000 37d30'30.000 3000000.000 1306466.471 3000000.000 1306466.471 CO S GP2 + -72d43'30.515 41d16'55.847 1006831.954 663542.786 1006831.954 663542.786 CT GP1 + -73d01'15.609 41d13'25.985 925448.220 642418.129 925448.220 642418.129 CT GP2 + -75d33'00.748 39d21'15.214 618403.524 493238.843 618403.524 493238.843 DE GP1 + -75d19'01.889 39d45'14.765 684135.532 638883.528 684135.532 638883.528 DE GP2 + -82d45'52.412 29d39'06.589 2519743.236 241248.726 2519743.236 241248.726 FL N GP1 + -84d55'11.533 29d38'51.982 1835122.674 235823.399 1835122.674 235823.399 FL N GP2 + -81d27'15.592 32d38'03.003 875449.222 958850.568 875449.222 958850.568 GA E GP1 + -83d15'39.990 33d29'58.626 322535.391 1274748.301 322535.391 1274748.301 GA E GP2 + -155d59'16.911 19d37'23.477 1472470.137 287083.198 1472470.137 287083.198 HI 1 GP1 + -155d18'06.262 19d31'24.578 1708685.701 250676.240 1708685.701 250676.240 HI 1 GP2 + -155d30'00.000 19d42'00.000 1640416.667 314739.275 1640416.667 314739.275 HI 1 GP3 + -155d30'00.000 19d42'30.000 1640416.667 317765.760 1640416.667 317765.760 HI 1 GP4 + -156d40'00.000 20d42'00.000 1640416.667 133177.588 1640416.667 133177.588 HI 2 GP1 + -156d40'00.000 20d42'30.000 1640416.667 136204.417 1640416.667 136204.417 HI 2 GP2 + -158d00'00.000 21d30'00.000 1640416.667 121084.931 1640416.667 121084.931 HI 3 GP1 + -158d01'30.000 21d37'30.000 1631925.017 166493.704 1631925.017 166493.704 HI 3 GP2 + -159d30'00.000 22d05'00.000 1640416.667 90820.525 1640416.667 90820.525 HI 4 GP1 + -160d10'00.000 21d42'00.000 1640416.667 12109.121 1640416.667 12109.121 HI 5 GP1 + -93d28'33.966 42d44'50.101 4927669.136 3735362.601 4927669.136 3735362.601 IA N GP1 + -93d54'22.084 42d40'23.699 4812032.409 3708655.393 4812032.409 3708655.393 IA N GP2 + -111d42'29.824 43d48'07.616 777180.670 778579.414 777180.670 778579.414 ID E GP1 + -112d22'35.516 43d35'26.260 600566.613 701226.817 600566.613 701226.817 ID E GP2 + -116d22'02.592 48d07'50.941 2473902.726 2357266.576 2473902.726 2357266.577 ID W GP1 + -88d07'06.790 41d46'11.855 1042839.901 1858837.259 1042839.901 1858837.259 IL E GP1 + -88d41'35.208 40d43'37.202 884532.422 1478959.911 884532.422 1478959.912 IL E GP2 + -85d40'00.000 40d00'00.000 328083.333 1730697.447 328083.333 1730697.447 IN E GP1 + -85d40'00.000 40d00'30.000 328083.333 1733733.065 328083.333 1733733.066 IN E GP2 + -86d14'27.780 40d00'12.690 167175.533 1732499.995 167175.533 1732499.995 IN E GP3 + -86d14'27.790 40d00'31.660 167187.126 1734419.540 167187.126 1734419.540 IN E GP4 + -86d14'28.103 40d00'47.412 167173.047 1736013.615 167173.047 1736013.616 IN E GP6 + -87d05'00.000 40d00'00.000 2952750.000 1730697.447 2952750.000 1730697.447 IN W GP1 + -87d05'00.000 40d00'30.000 2952750.000 1733733.065 2952750.000 1733733.066 IN W GP2 + -86d45'10.717 39d41'24.840 3045717.498 1618031.699 3045717.498 1618031.699 IN W GP3 + -87d41'44.075 37d54'24.755 2776105.988 968944.255 2776105.988 968944.255 IN W GP4 + -86d32'13.179 39d32'46.419 3106817.690 1565874.112 3106817.690 1565874.113 IN W GP5 + -87d25'26.675 38d26'17.646 2855150.544 1162044.125 2855150.544 1162044.125 IN W GP6 + -86d14'28.103 40d00'47.412 3188649.790 1736609.724 3188649.790 1736609.724 IN W GP7 + -86d14'27.780 40d00'12.690 3188708.130 1733096.467 3188708.130 1733096.467 IN W GP8 + -86d14'27.790 40d00'31.660 3188689.210 1735016.020 3188689.210 1735016.020 IN W GP9 + -96d47'54.567 38d58'52.096 1653880.047 238201.110 1653880.047 238201.110 KS N GP1 + -98d35'23.954 39d58'41.967 1146983.460 599694.197 1146983.460 599694.197 KS N GP2 + -84d05'43.283 38d14'35.963 1684830.325 270726.733 1684830.325 270726.733 KY N GP1 + -84d26'49.265 39d04'03.099 1584475.157 570918.805 1584475.157 570918.805 KY N GP2 + -91d34'46.483 31d57'26.243 3566283.410 531318.874 3566283.410 531318.874 LA N GP1 + -92d52'46.615 32d54'52.264 3164322.062 878564.036 3164322.062 878564.036 LA N GP2 + -91d29'09.480 31d56'44.721 3595353.711 527382.519 3595353.711 527382.519 LA N GP3 + -93d59'38.241 32d48'43.467 2821809.119 844247.864 2821809.119 844247.864 LA N GP4 + -89d00'00.000 28d50'00.000 4027995.272 128836.330 4027995.272 128836.330 LA S GP1 + -89d30'00.000 28d50'00.000 3867904.667 125925.406 3867904.667 125925.406 LA S GP2 + -89d29'59.999 29d19'59.994 3864995.756 307730.820 3864995.756 307730.820 LA S GP3 + -89d00'00.004 29d19'59.998 4024292.645 310627.715 4024292.645 310627.715 LA S GP4 + -89d10'23.487 29d20'32.615 3969054.663 312839.922 3969054.663 312839.922 LA S GP5 + -89d06'34.632 29d15'19.642 3989919.298 281618.678 3989919.298 281618.678 LA S GP6 + -89d01'33.803 29d07'47.918 4017480.813 236523.957 4017480.813 236523.957 LA S GP7 + -89d08'45.781 28d58'27.979 3980254.597 179219.900 3980254.597 179219.900 LA S GP9 + -70d27'00.716 41d40'15.808 942982.782 2706924.168 942982.782 2706924.168 MA M GP1 + -73d25'59.173 42d06'06.860 131613.265 2868104.007 131613.265 2868104.007 MA M GP2 + -76d11'27.492 39d12'06.132 1541600.105 560062.872 1541600.105 560062.872 MD GP1 + -77d02'30.406 38d26'37.492 1300367.185 283004.738 1300367.185 283004.738 MD GP2 + -77d30'10.460 38d59'25.903 1169392.711 482527.897 1169392.711 482527.897 MD GP3 + -68d24'25.489 46d32'46.920 1007629.154 1049880.999 1007629.154 1049880.999 ME E GP1 + -68d37'29.366 47d02'12.659 953127.598 1228762.971 953127.598 1228762.971 ME E GP2 + -83d29'17.919 42d19'19.299 13360865.013 300809.378 13360865.013 300809.378 MI S GP1 + -83d35'24.656 42d20'02.682 13333276.507 304929.978 13333276.507 304929.978 MI S GP2 + -85d55'26.569 41d50'10.236 12698916.149 126441.631 12698916.149 126441.631 MI S GP3 + -85d45'59.490 41d49'22.346 12741759.240 120840.463 12741759.240 120840.463 MI S GP4 + -91d27'51.183 47d08'19.177 3031741.394 565338.600 3031741.394 565338.600 MN N GP1 + -95d51'05.998 48d19'26.552 1955378.869 1005314.701 1955378.869 1005314.701 MN N GP2 + -92d30'00.000 38d15'00.000 1640416.667 879854.176 1640416.667 879854.176 MO C GP1 + -92d30'00.000 38d15'30.000 1640416.667 882888.780 1640416.667 882888.780 MO C GP2 + -91d42'04.297 37d22'05.932 471136.507 561031.592 471136.507 561031.592 MO E GP1 + -90d08'08.896 36d53'44.124 926703.606 386902.829 926703.606 386902.829 MO E GP2 + -94d30'00.000 38d15'00.000 2788708.333 758522.219 2788708.333 758522.219 MO W GP1 + -94d30'00.000 38d15'30.000 2788708.333 761556.846 2788708.333 761556.846 MO W GP2 + -89d10'14.013 30d30'51.338 878059.046 369015.468 878059.046 369015.468 MS E GP1 + -88d26'04.338 30d43'01.454 1109567.483 442842.466 1109567.483 442842.466 MS E GP2 + -106d29'11.521 47d52'21.103 2707564.623 1334850.273 2707564.623 1334850.273 MT N GP1 + -114d30'43.122 48d52'46.764 763315.457 1726511.247 763315.457 1726511.247 MT N GP2 + -81d12'31.790 35d09'31.049 1339869.379 520003.003 1339869.379 520003.003 NC GP1 + -76d31'54.918 35d33'51.452 2733923.842 669426.932 2733923.842 669426.932 NC GP2 + -78d28'26.580 36d15'15.480 2155084.559 911885.081 2155084.559 911885.081 NC GP3 + -98d46'03.232 48d08'13.483 2391470.474 419526.909 2391470.474 419526.909 ND N GP1 + -101d18'21.456 47d39'18.935 1769873.906 240054.790 1769873.906 240054.790 ND N GP2 + -96d17'52.930 42d04'48.305 2644820.409 839912.565 2644820.409 839912.565 NE N GP1 + -100d49'26.949 41d58'54.025 1416403.828 783622.046 1416403.828 783622.046 NE N GP2 + -70d56'11.287 43d08'15.006 1179151.981 233188.619 1179151.981 233188.620 NH GP1 + -72d32'32.197 42d51'25.984 749470.166 131406.173 749470.166 131406.173 NH GP2 + -74d13'55.737 39d52'02.095 567304.543 376673.733 567304.543 376673.733 NJ GP1 + -74d51'24.058 41d12'07.401 393979.614 863010.549 393979.614 863010.549 NJ GP2 + -106d15'00.000 33d30'00.000 1640416.667 909448.493 1640416.667 909448.493 NM C GP1 + -106d15'00.000 33d30'30.000 1640416.667 912480.595 1640416.667 912480.595 NM C GP2 + -104d11'42.410 33d17'21.732 583573.491 832847.194 583573.491 832847.194 NM E GP1 + -104d47'37.948 33d22'32.349 400747.149 864523.566 400747.149 864523.566 NM E GP2 + -107d50'00.000 32d30'00.000 2723091.667 545634.896 2723091.667 545634.896 NM W GP1 + -107d50'00.000 32d30'30.000 2723091.667 548666.562 2723091.667 548666.562 NM W GP2 + -114d49'09.337 35d43'09.299 882966.545 26600313.129 882966.545 26600313.129 NV E GP1 + -116d50'32.766 41d30'37.869 311338.993 28710910.564 311338.993 28710910.565 NV E GP2 + -74d02'53.671 42d17'01.775 614362.369 1257287.611 614362.369 1257287.611 NY E GP1 + -74d44'39.818 42d30'07.382 426225.275 1336579.561 426225.275 1336579.561 NY E GP2 + -73d02'36.247 40d47'50.624 1249103.533 231235.845 1249103.533 231235.845 NY L GP1 + -74d06'58.125 40d36'07.281 951997.667 158630.811 951997.667 158630.811 NY L GP2 + -74d00'00.000 40d45'00.000 984250.000 212521.887 984250.000 212521.887 NY L GP3 + -73d15'00.000 40d37'30.000 1192442.028 167871.999 1192442.028 167871.999 NY L GP4 + -73d22'30.000 40d45'00.000 1157419.074 213139.664 1157419.074 213139.664 NY L GP5 + -80d49'28.238 40d17'50.894 2435851.621 234309.717 2435851.621 234309.717 OH N GP1 + -82d37'31.021 40d20'14.678 1933572.857 244396.244 1933572.857 244396.244 OH N GP2 + -98d42'45.414 36d50'19.568 1759953.675 670136.468 1759953.675 670136.468 OK N GP1 + -95d38'44.046 35d20'36.925 2670659.833 133589.112 2670659.833 133589.112 OK N GP2 + -119d46'26.562 44d24'25.943 5110990.827 999684.042 5110990.827 999684.042 OR S GP1 + -121d09'56.105 44d23'08.924 4747225.642 991752.635 4747225.642 991752.635 OR S GP2 + -74d33'20.644 41d23'48.566 2844678.533 464365.610 2844678.533 464365.610 PA N GP1 + -78d09'48.121 40d51'35.455 1854155.505 252833.700 1854155.505 252833.700 PA N GP2 + -67d08'56.930 18d29'56.972 408161.046 898432.808 408161.046 898432.808 PR F GP1 + -66d52'30.000 18d15'00.000 502925.440 807654.009 502925.440 807654.009 PR F GP2 + -66d26'00.000 18d15'00.000 656166.667 807469.207 656166.667 807469.207 PR F GP3 + -66d26'00.000 18d30'00.000 656166.667 898253.524 656166.667 898253.524 PR F GP4 + -67d08'56.930 18d29'56.972 408161.046 898432.808 408161.046 898432.808 PR M GP1 + -66d52'30.000 18d15'00.000 502925.440 807654.009 502925.440 807654.009 PR M GP2 + -66d26'00.000 18d15'00.000 656166.667 807469.207 656166.667 807469.207 PR M GP3 + -66d26'00.000 18d30'00.000 656166.667 898253.524 656166.667 898253.524 PR M GP4 + -71d16'00.833 41d32'24.848 391898.667 166566.121 391898.667 166566.121 RI GP1 + -71d37'13.730 41d23'53.266 295027.785 114722.837 295027.785 114722.837 RI GP2 + -80d32'30.000 34d32'30.000 2138015.480 985710.127 2138015.480 985710.127 SC N GP1 + -81d00'00.000 34d32'30.000 1999996.000 985404.077 1999996.000 985404.077 SC N GP2 + -80d32'30.000 33d32'30.000 2139629.138 621856.156 2139629.138 621856.156 SC S GP1 + -81d00'00.000 33d32'30.000 1999996.000 621546.527 1999996.000 621546.527 SC S GP2 + -99d12'21.983 44d06'08.121 2177060.848 99066.761 2177060.848 99066.761 SD N GP1 + -100d32'28.873 44d32'34.917 1827356.330 259209.712 1827356.330 259209.712 SD N GP2 + -85d13'55.967 36d21'48.503 2194569.476 739881.374 2194569.476 739881.374 TN GP1 + -88d43'05.849 36d30'08.410 1169616.875 800645.091 1169616.875 800645.091 TN GP2 + -100d33'06.303 34d39'35.684 941333.504 3522390.511 941333.504 3522390.511 TX N GP1 + -102d48'50.949 34d43'39.249 261294.654 3548271.494 261294.654 3548271.494 TX N GP2 + -111d30'00.000 38d40'00.000 1640416.667 6683084.515 1640416.667 6683084.515 UT C GP1 + -111d30'00.000 38d40'30.000 1640416.667 6686119.851 1640416.667 6686119.851 UT C GP2 + -111d30'00.000 41d30'00.000 1640416.667 3705897.565 1640416.667 3705897.565 UT N GP1 + -111d30'00.000 41d30'30.000 1640416.667 3708933.975 1640416.667 3708933.975 UT N GP2 + -109d48'37.967 38d29'30.877 2123972.902 10511502.846 2123972.902 10511502.846 UT S GP1 + -113d52'56.922 37d09'18.788 946139.893 10029235.592 946139.893 10029235.592 UT S GP2 + -77d13'46.945 38d55'12.407 11844323.043 7020638.975 11844323.043 7020638.975 VA N GP1 + -79d18'51.557 38d09'59.020 11248797.976 6744688.474 11248797.976 6744688.474 VA N GP2 + -77d38'10.823 37d49'23.964 11732395.294 6619889.590 11732395.294 6619889.590 VA N GP3 + -79d26'19.475 37d47'25.852 11211628.032 6608155.232 11211628.032 6608155.232 VA N GP4 + -77d44'30.336 39d00'06.804 11698399.159 7048812.266 11698399.159 7048812.266 VA N GP6 + -77d43'47.013 38d59'55.454 11701828.676 7047692.496 11701828.676 7047692.496 VA N GP9 + -78d30'00.000 37d30'00.000 11482916.667 3705606.876 11482916.667 3705606.876 VA S GP1 + -78d30'00.000 37d30'30.000 11482916.667 3708641.137 11482916.667 3708641.137 VA S GP2 + -77d32'33.000 36d54'42.507 11762849.074 3492868.579 11762849.074 3492868.579 VA S GP3 + -77d21'55.732 38d04'53.901 11809480.679 3919367.025 11809480.679 3919367.025 VA S GP4 + -64d45'30.000 17d45'30.000 1238952.313 631597.723 1238952.313 631597.723 VI F GP1 + -66d26'00.000 17d45'56.426 656166.667 631597.858 656166.667 631597.858 VI F GP2 + -64d45'30.000 17d45'30.000 1238952.313 631597.723 1238952.313 631597.723 VI M GP1 + -66d26'00.000 17d45'56.426 656166.667 631597.858 656166.667 631597.858 VI M GP2 + -72d29'31.418 43d09'58.526 1642534.834 242819.594 1642534.834 242819.594 VT GP1 + -73d12'06.978 44d22'22.810 1456873.971 683480.189 1456873.971 683480.189 VT GP2 + -119d51'37.006 47d50'51.069 1879336.368 310659.110 1879336.368 310659.110 WA N GP1 + -123d59'49.087 48d09'29.131 868484.545 438307.526 868484.545 438307.526 WA N GP2 + -88d44'40.778 45d22'21.598 2291123.165 77666.637 2291123.165 77666.637 WI N GP1 + -92d12'19.275 45d48'35.812 1406198.343 242375.264 1406198.343 242375.264 WI N GP2 + -77d53'39.269 39d14'39.339 2423253.113 275144.536 2423253.113 275144.536 WV N GP1 + -81d33'23.549 39d18'08.535 1386588.889 298906.239 1386588.889 298906.239 WV N GP2 + -77d30'10.460 38d59'25.903 2536117.742 184974.384 2536117.742 184974.384 WV N GP3 + -105d31'02.882 43d30'40.600 563107.342 1097477.489 563107.342 1097477.489 WY E GP1 + -105d22'42.856 43d30'14.685 599946.619 1094729.118 599946.619 1094729.119 WY E GP2 + -105d28'42.827 43d36'33.391 573561.723 1133155.513 573561.723 1133155.514 WY E GP3 + -105d23'43.223 42d00'59.422 594028.794 552611.396 594028.794 552611.396 WY E GP4 + -104d35'06.686 42d34'50.366 812768.620 758647.940 812768.620 758647.940 WY E GP5 + -106d13'03.224 41d36'14.640 1617477.770 732300.770 1617477.770 732300.770 WYEC GP1 + -108d01'56.720 41d51'57.518 1121920.469 826536.345 1121920.469 826536.345 WYEC GP2 diff --git a/proj4/nad/proj_def.dat b/proj4/nad/proj_def.dat new file mode 100644 index 000000000000..00dff281f511 --- /dev/null +++ b/proj4/nad/proj_def.dat @@ -0,0 +1,17 @@ +# Projection library defaults file +# SCCSID--- @(#)proj_def.dat 4.3 94/02/23 GIE REL" +# very preliminary version + +ellps=WGS84 +<> + # Conterminous U.S. map +lat_1=29.5 +lat_2=45.5 +<> + # Conterminous U.S. map +lat_1=33 +lat_2=45 +<> + +W=2 +<> diff --git a/proj4/nad/proj_outIGNF.dist b/proj4/nad/proj_outIGNF.dist new file mode 100644 index 000000000000..45112f60491c --- /dev/null +++ b/proj4/nad/proj_outIGNF.dist @@ -0,0 +1,40 @@ ++init=./IGNF:NTFG +to +init=./IGNF:RGF93G + 3.300866856 43.4477976569 0.0000 3d18'0.915"E 43d26'52.077"N 0.000 ++init=./IGNF:LAMBE +to +init=./IGNF:LAMB93 + 600000.0000 2600545.4523 0.0000 652760.737 7033791.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.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.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 + 998137.3947 2413822.2844 0.0000 592842.792 5410120.554 0.000 + 600000.0000 2200000.0000 0.0000 179041.670 5209746.080 0.000 + 311552.5340 1906457.4840 0.0000 -96825.465 4909184.136 0.000 + 960488.4138 1910172.8812 0.0000 523880.019 4909191.141 0.000 + 600000.0000 1699510.8340 0.0000 179047.633 4708817.007 0.000 +1203792.5981 626873.17210 0.0000 658287.395 3623739.237 0.000 ++init=./IGNF:RGF93G +to +init=./IGNF:GEOPORTALFXX +2d20'11.4239243" 50d23'59.7718445" 0.0 179040.151 5610495.281 0.000 +-3d57'49.4051448" 48d35'59.7121716" 0.0 -303729.365 5410118.352 0.000 +7d44'12.1439796" 48d35'59.7832558" 0.0 592842.794 5410120.550 0.000 +2d20'11.4951975" 46d47'59.8029841" 0.0 179041.668 5209746.077 0.000 +-1d15'48.9240599" 44d05'59.8251878" 0.0 -96825.467 4909184.138 0.000 +6d50'12.2276489" 44d06'00.0517019" 0.0 523880.022 4909191.143 0.000 +2d20'11.7754730" 42d18'00.0824436" 0.0 179047.634 4708817.010 0.000 +9d32'12.6680218" 41d24'00.3542556" 0.0 730783.054 4608637.873 0.000 ++init=./IGNF:RGF93G +to +init=./IGNF:MILLER +2d20'11.4239243" 50d23'59.7718445" 0.0 260098.730 6140682.441 0.000 +-3d57'49.4051448" 48d35'59.7121716" 0.0 -441239.699 5880610.004 0.000 +7d44'12.1439796" 48d35'59.7832558" 0.0 861246.246 5880612.827 0.000 +2d20'11.4951975" 46d47'59.8029841" 0.0 260100.934 5625762.156 0.000 +-1d15'48.9240599" 44d05'59.8251878" 0.0 -140662.197 5252490.165 0.000 +6d50'12.2276489" 44d06'00.0517019" 0.0 761061.291 5252498.745 0.000 +2d20'11.7754730" 42d18'00.0824436" 0.0 260109.601 5009175.714 0.000 +9d32'12.6680218" 41d24'00.3542556" 0.0 1061637.534 4889066.592 0.000 ++init=./IGNF:RGR92 +to +init=./IGNF:REUN47 +3356123.5400 1303218.3090 5247430.6050 3353421.833 1304074.314 5248935.607 diff --git a/proj4/nad/proj_outIGNF.dist-real b/proj4/nad/proj_outIGNF.dist-real new file mode 100644 index 000000000000..ad80c0d3bfb6 --- /dev/null +++ b/proj4/nad/proj_outIGNF.dist-real @@ -0,0 +1,34 @@ + 3d18'0.31206816" 43d26'52.07156484" 0.0 3d18'0.91471" 43d26'52.077" 0.000 + 600000.0000 2600545.4523 0.0000 652760.737 7033791.245 0.000 + 135638.3592 2418760.4094 0.0000 187194.062 6855928.882 0.000 + 998137.3947 2413822.2844 0.0000 1049052.257 6843776.562 0.000 + 600000.0000 2200000.0000 0.0000 649398.871 6633524.192 0.000 + 311552.5340 1906457.4840 0.0000 358799.172 6342652.486 0.000 + 960488.4138 1910172.8812 0.0000 1007068.686 6340907.237 0.000 + 600000.0000 1699510.8340 0.0000 645204.279 6133556.746 0.000 +1203792.5981 626873.17210 0.0000 1247610.438 6055822.838 0.000 + 600000.0000 2600545.4523 0.0000 179040.148 5610495.275 0.000 + 135638.3592 2418760.4094 0.0000 -303729.363 5410118.356 0.000 + 998137.3947 2413822.2844 0.0000 592842.792 5410120.554 0.000 + 600000.0000 2200000.0000 0.0000 179041.670 5209746.080 0.000 + 311552.5340 1906457.4840 0.0000 -96825.465 4909184.136 0.000 + 960488.4138 1910172.8812 0.0000 523880.019 4909191.141 0.000 + 600000.0000 1699510.8340 0.0000 179047.633 4708817.007 0.000 +1203792.5981 626873.17210 0.0000 658287.395 3623739.237 0.000 + 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 260098.730 6140682.441 0.000 +-3d57'49.4051448" 48d35'59.7121716" 0.0 -441239.699 5880610.004 0.000 + 7d44'12.1439796" 48d35'59.7832558" 0.0 861246.246 5880612.827 0.000 + 2d20'11.4951975" 46d47'59.8029841" 0.0 260100.934 5625762.156 0.000 +-1d15'48.9240599" 44d05'59.8251878" 0.0 -140662.197 5252490.165 0.000 + 6d50'12.2276489" 44d06'00.0517019" 0.0 761061.291 5252498.745 0.000 + 2d20'11.7754730" 42d18'00.0824436" 0.0 260109.601 5009175.714 0.000 + 9d32'12.6680218" 41d24'00.3542556" 0.0 1061637.534 4889066.592 0.000 +3356123.5400 1303218.3090 5247430.6050 3353421.023 1304074.545 5248934.985 diff --git a/proj4/nad/td_out.dist b/proj4/nad/td_out.dist new file mode 100644 index 000000000000..060d14d20176 --- /dev/null +++ b/proj4/nad/td_out.dist @@ -0,0 +1,25 @@ +############################################################## +1st through ntv1, 2nd through conus +111d00'00.000"W 44d00'00.000"N 0.0 111d0'3.085"W 43d59'59.756"N 0.000 +111d00'00.000"W 39d00'00.000"N 0.0 111d0'2.604"W 38d59'59.912"N 0.000 +############################################################## +As above, but without ntv1 everything goes through conus file. +111d00'00.000"W 44d00'00.000"N 0.0 111d0'2.788"W 43d59'59.725"N 0.000 +111d00'00.000"W 39d00'00.000"N 0.0 111d0'2.604"W 38d59'59.912"N 0.000 +############################################################## +Test MD used where available +79d58'00.000"W 37d02'00.000"N 0.0 79d58'0.005"W 37d1'59.998"N 0.000 +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/proj4/nad/test27 b/proj4/nad/test27 new file mode 100755 index 000000000000..66f6f1c44c99 --- /dev/null +++ b/proj4/nad/test27 @@ -0,0 +1,848 @@ +: +# Script to test most of the SPCS zones. +# This script generated from execution of NMD's program l176, where +# the second pair of numbers are respective easting and northing output. +# +# Proj will vary in the .001ft range with projections using Transverse +# Mercator due to greater precision of meridinal distance function. +# +NAD_DIR=`dirname $0` +EXE=$1 + +usage() +{ + echo "Usage: ${0} " + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=proj_out27 +INIT_FILE=${NAD_DIR}/nad27 +# +echo "doing tests into file ${OUT}, please wait" +# +$EXE +units=us-ft +init=${INIT_FILE}:5001 -E -f '%.3f' >${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=proj_out83 +INIT_FILE=${NAD_DIR}/nad83 +# +echo "doing tests into file ${OUT}, please wait" +# +$EXE +units=us-ft +init=${INIT_FILE}:5001 -E -f '%.3f' >${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=proj_outIGNF +INIT_FILE=./IGNF +RES="-f %.3f" +# +echo "doing tests into file ${OUT}, please wait" +# +rm -f ${OUT} +echo "+init=${INIT_FILE}:NTFG +to +init=${INIT_FILE}:RGF93G" >>${OUT} +$EXE +init=${INIT_FILE}:NTFG +to +init=${INIT_FILE}:RGF93G -E >>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:LAMBE +to +init=${INIT_FILE}:LAMB93 -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:LAMBE +to +init=${INIT_FILE}:GEOPORTALFXX -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:RGF93G +to +init=${INIT_FILE}:GEOPORTALFXX -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:RGF93G +to +init=${INIT_FILE}:MILLER -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:RGR92 +to +init=${INIT_FILE}:REUN47 -E $RES >>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=td_out +#EXE=../src/cs2cs +# +echo "doing tests into file ${OUT}, please wait" +rm -f ${OUT} +# +echo "##############################################################" >> ${OUT} +echo 1st through ntv1, 2nd through conus >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat,conus \ + +to +proj=latlong +datum=NAD83 \ + -E >>${OUT} <> ${OUT} +echo As above, but without ntv1 everything goes through conus file. >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=conus \ + +to +proj=latlong +datum=NAD83 \ + -E >>${OUT} <> ${OUT} +echo Test MD used where available >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=MD,conus \ + +to +proj=latlong +datum=NAD83 \ + -E >>${OUT} <>${OUT} <> ${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} <>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=tf_out +#EXE=../src/cs2cs +# +echo "doing tests into file ${OUT}, please wait" +rm -f ${OUT} +# +echo "Test healpix 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} <>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=ntv2_out +#EXE=../src/cs2cs +# +echo "doing tests into file ${OUT}, please wait" +rm -f ${OUT} +# +echo "##############################################################" >> ${OUT} +echo Point in the ONwinsor subgrid. >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=ntv2_0.gsb \ + +to +proj=latlong +datum=NAD83 -E -w4 >>${OUT} <> ${OUT} +echo Try with NTv2 and NTv1 together ... falls back to NTv1 >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=ntv2_0.gsb,ntv1_can.dat,conus \ + +to +proj=latlong +datum=NAD83 -E -w4 >>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +# Would be great to have a universale way of selecting a locale with +# a decimal separator that is not '.' +if command locale >/dev/null 2>/dev/null; then + if test `locale -a | grep fr_FR.utf8`; then + echo "Using locale with comma as decimal separator" + export LC_ALL=fr_FR.UTF-8 + export PROJ_USE_ENV_LOCALE=1 + fi +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=tv_out +#EXE=../src/cs2cs +# +echo "doing tests into file ${OUT}, please wait" +rm -f ${OUT} +# +echo "##############################################################" >> ${OUT} +echo Test raw ellipse to raw ellipse >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 \ + +to +proj=latlong +ellps=bessel \ + -E >>${OUT} <> ${OUT} +echo Test NAD27 to raw ellipse >> ${OUT} +# +$EXE +proj=latlong +datum=NAD27 \ + +to +proj=latlong +ellps=bessel \ + -E >>${OUT} <> ${OUT} +echo Between two 3parameter approximations on same ellipsoid >> ${OUT} +# +$EXE +proj=latlong +ellps=bessel +towgs84=5,0,0 \ + +to +proj=latlong +ellps=bessel +towgs84=1,0,0 \ + -E >>${OUT} <> ${OUT} +echo 3param to raw ellipsoid on same ellipsoid >> ${OUT} +# +$EXE +proj=latlong +ellps=bessel +towgs84=5,0,0 \ + +to +proj=latlong +ellps=bessel \ + -E >>${OUT} <> ${OUT} +echo Test simple prime meridian handling. >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 +pm=greenwich \ + +to +proj=latlong +datum=WGS84 +pm=1 \ + -E >>${OUT} <> ${OUT} +echo Test support for the lon_wrap switch. >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=latlong +datum=WGS84 +lon_wrap=180 \ + -E >>${OUT} <> ${OUT} +echo Test simple prime meridian handling within a projection. >> ${OUT} +# +$EXE +proj=utm +zone=11 +datum=WGS84 +pm=3 \ + +to +proj=latlong +datum=WGS84 +pm=1w \ + -E >>${OUT} <> ${OUT} +echo Test geocentric x/y/z generation. >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=geocent +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo Test geocentric x/y/z consumption. >> ${OUT} +# +$EXE +proj=geocent +datum=WGS84 \ + +to +proj=latlong +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +#echo Test conversion between geocentric latlong and geodetic latlong >> ${OUT} +# +# The +geoc flag does not currently work with pj_transform() so this is +# disabled. +# +#$EXE +proj=latlong +datum=WGS84 +geoc \ +# +to +proj=latlong +datum=WGS84 \ +# -E >>${OUT} <> ${OUT} +echo "Test stere projection (re: win32 ticket 12)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=stere +lat_0=90 +lon_0=0 +lat_ts=70 +datum=WGS84 \ + -E >>${OUT} <> ${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} <> ${OUT} +echo "Test sts projection (re: ticket 12)" >> ${OUT} +# +$EXE +proj=latlong +ellps=WGS84 \ + +to +proj=kav5 +ellps=WGS84 +units=m \ + -E >>${OUT} <>${OUT} <> ${OUT} +echo "Test RSO Borneo projection (re: ticket 62)" >> ${OUT} +# +$EXE +proj=latlong +a=6377298.556 +rf=300.8017 \ + +to +proj=omerc +a=6377298.556 +rf=300.8017 +lat_0=4 +lonc=115 \ + +alpha=53d18\'56.9537 +gamma=53d7\'48.3685 +k_0=0.99984 \ + +x_0=590476.87 +y_0=442857.65 \ + -E >>${OUT} <> ${OUT} +echo "Test extended transverse mercator (#97)" >> ${OUT} +# +$EXE +proj=etmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + +to +proj=latlong +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test extended transverse mercator inverse (#97)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=etmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + -E >>${OUT} <> ${OUT} +echo "Test transverse mercator (#97)" >> ${OUT} +# +$EXE +proj=tmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + +to +proj=latlong +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test transverse mercator inverse (#97)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=tmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + -E >>${OUT} <> ${OUT} +echo "Test robinson projection (#113)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=robin +datum=WGS84 \ + -E >>${OUT} <>${OUT} <> ${OUT} +echo "Test hammer projection (pull request #329)" >> ${OUT} +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=hammer +datum=WGS84 \ + -E >>${OUT} <>${OUT} <> ${OUT} +echo "Test healpix forward projection on sphere" >> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=healpix +a=1 +lon_0=0 -f '%.'5'f' \ + -E >>${OUT} <>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 \ + +to +proj=healpix +a=1 +lon_0=0 +ellps=WGS84 -f '%.'5'f' \ + -E >>${OUT} <>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 \ + +to +proj=healpix +a=1 +lon_0=0 +ellps=WGS84 -f '%.'5'f' -I\ + -E >>${OUT} <>${OUT} <> ${OUT} +echo "Test rHEALPix forward projection on sphere north=0 south=0" >> ${OUT} +$EXE +proj=latlong +R=5 \ + +to +proj=rhealpix +R=5 +north_square=0 +south_square=0 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix forward projection on sphere north=1 south=1" >> ${OUT} +$EXE +proj=latlong +R=5 \ + +to +proj=rhealpix +R=5 +north_square=1 +south_square=1 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix inverse projection on sphere north=0 south=0" >> ${OUT} +$EXE +proj=latlong +R=5 \ + +to +proj=rhealpix +R=5 +north_square=0 +south_square=0 -f '%.'5'f' -I\ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix inverse projection on sphere north=1 south=1" >> ${OUT} +$EXE +proj=latlong +R=5 \ + +to +proj=rhealpix +R=5 +north_square=1 +south_square=1 -f '%.'5'f' -I\ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix forward projection on ellipsoid north=0 south=0" >> ${OUT} +$EXE +proj=latlong +a=5 +e=0.8 +r_a=4.3220011711888882\ + +to +proj=rhealpix +a=5 +e=0.8 +r_a=4.3220011711888882 +north_square=0 +south_square=0 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix forward projection on ellipsoid north=1 south=1" >> ${OUT} +$EXE +proj=latlong +a=5 +e=0.8 +r_a=4.3220011711888882\ + +to +proj=rhealpix +a=5 +e=0.8 +r_a=4.3220011711888882 +north_square=1 +south_square=1 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix inverse projection on ellipsoid north=0 south=0" >> ${OUT} +$EXE +proj=latlong +a=5 +e=0.8 +r_a=4.3220011711888882\ + +to +proj=rhealpix +a=5 -I +e=0.8 +r_a=4.3220011711888882 +north_square=0 +south_square=0 -f '%.'5'f'\ + -E >>${OUT} <> ${OUT} +echo "Test rHEALPix inverse projection on ellipsoid north=1 south=1" >> ${OUT} +$EXE +proj=latlong +a=5 +e=0.8 +r_a=4.3220011711888882\ + +to +proj=rhealpix +a=5 -I +e=0.8 +r_a=4.3220011711888882 +north_square=1 +south_square=1 -f '%.'5'f'\ + -E >>${OUT} <> ${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} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere -I -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 -I -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere +sweep=x -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 +sweep=x -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere +sweep=x -I -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +ellps=sphere \ + +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 +sweep=x -I -E >>${OUT} <> ${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} <> ${OUT} +echo "Test the Natural Earth II Projection" >> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=natearth2 +a=6371008.7714 +b=6371008.7714 -f '%.'7'f' \ + -E >>${OUT} <> ${OUT} +echo "Test the Compact Miller projection" >> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=comill +a=6371008.7714 +b=6371008.7714 -f '%.'7'f' \ + -E >>${OUT} <> ${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} <>${OUT} <> ${OUT} +echo "Test laea" >> ${OUT} +# +$EXE -f '%.12f' \ + +proj=laea +lat_0=45 +lon_0=-100 +units=m +datum=WGS84 +no_defs \ + +to +proj=latlong +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test forward calcofi projection" >> ${OUT} +$EXE +proj=latlong +ellps=clrk66 \ + +to +proj=calcofi +ellps=clrk66 \ + -E >>${OUT} <> ${OUT} +$EXE +proj=calcofi +ellps=clrk66 \ + +to +proj=longlat +ellps=clrk66 \ + -E >>${OUT} <> ${OUT} +echo "Check inverse error handling with ob_tran (#225)" >> ${OUT} +$EXE +proj=ob_tran \ + +o_proj=moll +o_lon_p=LON_POLE +o_lat_p=LAT_POLE +lon_0=180 +ellps=WGS84 \ + -E >>${OUT} <> ${OUT} +$EXE -I +proj=ob_tran \ + +o_proj=moll +o_lon_p=LON_POLE +o_lat_p=LAT_POLE +lon_0=180 +ellps=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test MGI datum gives expected results (#207)" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=latlong +datum=WGS84 \ + +to +init=epsg:31284 \ + -E >>${OUT} <> ${OUT} +echo "Test omerc sensitivity with locations 90d from origin(#114)" >> ${OUT} +# +$EXE -f '%.8f' \ + +proj=latlong +ellps=WGS84 \ + +to +proj=omerc +ellps=WGS84 +lon_1=62.581150 +lat_1=74.856102 \ + +lon_2=53.942810 +lat_2=74.905884 +units=km +no_rot +no_defs \ + -E >>${OUT} <> ${OUT} +echo "Test omerc differences between poles (#190)" >> ${OUT} +# First, north pole. +$EXE -f '%.3f' \ + +proj=latlong +ellps=WGS84 \ + +to +proj=omerc +ellps=WGS84 +datum=WGS84 +no_rot \ + +lon_1=-27 +lat_1=70 +lon_2=-38 +lat_2=80 +lat_0=70 \ + -E >>${OUT} <>${OUT} <> ${OUT} +echo "Test qsc" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=latlong +datum=WGS84 \ + +to +proj=qsc +datum=WGS84 +no_defs \ + -E >>${OUT} <>${OUT} <> ${OUT} +echo "Test bug 229" >> ${OUT} +# +$EXE -f '%.13f' \ + +init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0 \ + +to +proj=latlong +datum=WGS84 +no_defs \ + -E >>${OUT} <> ${OUT} +echo "Test bug 229 (2)" >> ${OUT} +# +$EXE -f '%.13f' \ + +init=epsg:4326 +to +init=epsg:4326 \ + -E >>${OUT} <> ${OUT} +echo "Test bug 244 " >> ${OUT} +# +$EXE -f '%.8f' \ + +init=epsg:4326 \ + +to +proj=aeqd +lon_0=130.0 +lat_0=40.0 +a=6378137 +b=6378137 +units=m +no_defs \ + -E >>${OUT} <> ${OUT} +echo "Test bug 244 (2)" >> ${OUT} +# +$EXE -f '%.11f' \ + +proj=aeqd +lon_0=130.0 +lat_0=40.0 +a=6378137 +b=6378137 +units=m +no_defs \ + +to +init=epsg:4326 \ + -E >>${OUT} <> ${OUT} +echo "Test bug 245 (use +datum=carthage)" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=longlat +datum=WGS84 +no_defs +to +proj=utm +zone=32 +datum=carthage +no_defs \ + -E >>${OUT} <> ${OUT} +echo "Test bug 245 (use expansion of +datum=carthage)" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=longlat +datum=WGS84 +no_defs +to +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263.0,6.0,431.0 +no_defs \ + -E >>${OUT} <> ${OUT} +echo "Test SCH forward projection" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=latlong +datum=WGS84 +to +proj=sch +datum=WGS84 +plat_0=30.0 +plon_0=45.0 \ + +phdg_0=-12.0 +nodefs \ + -E >> ${OUT} <> ${OUT} +echo "Test SCH inverse projection" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=sch +datum=WGS84 +plat_0=30.0 +plon_0=45.0 +phdg_0=-12.0 +nodefs +to \ + +proj=latlong +datum=WGS84 \ + -E >> ${OUT} <> ${OUT} +echo "Test issue #316 (switch utm to use etmerc)" >> ${OUT} +# +$EXE -f '%.6f' \ + +proj=latlong +datum=WGS84 +no_defs +to +proj=utm +zone=35 +datum=WGS84 +no_defs \ + -E >>${OUT} <> ${OUT} +echo "Test issue #316 (switch utm to use etmerc)" >> ${OUT} +# +$EXE -f '%.6f' \ + +proj=latlong +datum=WGS84 +no_defs +to +proj=etmerc +datum=WGS84 +no_defs +k=0.9996 +lon_0=27 +x_0=500000 -f %.6f \ + -E >>${OUT} <> ${OUT} +echo "Test nzmg forward projection" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=latlong +datum=WGS84 +to \ + +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=WGS84 +units=m +no_defs \ + -E >> ${OUT} <> ${OUT} +echo "Test nzmg inverse projection" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=WGS84 +units=m +no_defs +to \ + +proj=latlong +datum=WGS84 \ + -E >> ${OUT} <> ${OUT} +echo "Test misrsom forward projection" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=latlong +datum=WGS84 +no_defs +to \ + +proj=misrsom +path=41 +ellps=WGS84 +units=m \ + -E >> ${OUT} <> ${OUT} +echo "Test misrsom inverse projection" >> ${OUT} +# +$EXE -f '%.7f' \ + +proj=misrsom +path=41 +ellps=WGS84 +units=m +no_defs +to \ + +proj=latlong +datum=WGS84 -f '%0.7f' \ + -E >> ${OUT} <> ${OUT} +echo "Test patterson forward projection" >> ${OUT} +# +$EXE -f '%0.8f' \ + +proj=latlong +datum=WGS84 \ + +to +proj=patterson +a=6371008.7714 +b=6371008.7714 +units=m \ + -E >> ${OUT} <> ${OUT} +echo "Test patterson inverse projection" >> ${OUT} +# +$EXE -f '%0.3f' \ + +proj=patterson +a=6371008.7714 +b=6371008.7714 +units=m \ + +to +proj=latlong +datum=WGS84 \ + -E >> ${OUT} < # Swiss Coordinate System + +proj=somerc +lat_0=46d57'8.660"N +lon_0=7d26'22.500"E + +ellps=bessel +x_0=600000 +y_0=200000 + +k_0=1. no_defs <> + # Laborde grid for Madagascar + proj=labrd ellps=intl lon_0=46d26'13.95E lat_0=18d54S + azi=18d54 k_0=.9995 x_0=400000 y_0=800000 + no_defs <> + # New Zealand Map Grid (NZMG) + proj=nzmg # Projection unique to N.Z. so all factors fixed + no_defs <> +# Secondary grids DMA TM8358.1, p. 4.3 + # British West Indies + proj=tmerc ellps=clrk80 lon_0=62W + x_0=400000 k_0=0.9995 + no_defs <> + # Costa Rica Norte + proj=lcc ellps=clrk66 lat_1=10d28N lon_0=84d20W + x_0=500000 y_0=217820.522 k_0=0.99995696 + no_defs <> + # Costa Rica Sud + proj=lcc ellps=clrk66 lat_1=9dN lon_0=83d40W + x_0=500000 y_0=327987.436 k_0=0.99995696 + no_defs <> + # Cuba Norte + proj=lcc ellps=clrk66 lat_1=22d21N lon_0=81dW + x_0=500000 y_0=280296.016 k_0=0.99993602 + no_defs <> + # Cuba Sud + proj=lcc ellps=clrk66 lat_1=20d43'N lon_0=76d50'W + x_0=500000 y_0=229126.939 k_0=0.99994848 + no_defs <> + # Dominican Republic + proj=lcc ellps=clrk66 lat_1=18d49'N lon_0=71d30'W + x_0=500000 y_0=277063.657 k_0=0.99991102 + no_defs <> + # Egypt + proj=tmerc ellps=intl lon_0=25d30'E x_0=300000 k_0=0.99985 + no_defs <> + # Egypt + proj=tmerc ellps=intl lon_0=28d30'E x_0=300000 k_0=0.99985 + no_defs <> + # Egypt + proj=tmerc ellps=intl lon_0=31d30'E x_0=300000 k_0=0.99985 + no_defs <> + # Egypt + proj=tmerc ellps=intl lon_0=34d30'E x_0=300000 k_0=0.99985 + no_defs <> + # Egypt + proj=tmerc ellps=intl lon_0=37d30'E x_0=300000 k_0=0.99985 + no_defs <> + # El Salvador + proj=lcc ellps=clrk66 lat_1=13d47'N lon_0=89dW + x_0=500000 y_0=295809.184 k_0=0.99996704 + no_defs <> + # Guatemala Norte + proj=lcc ellps=clrk66 lat_1=16d49'N lon_0=90d20'W + x_0=500000 y_0=292209.579 k_0=0.99992226 + no_defs <> + # Guatemala Sud + proj=lcc ellps=clrk66 lat_1=14d54'N lon_0=90d20'W + x_0=500000 y_0=325992.681 k_0=0.99989906 + no_defs <> + # Haiti + proj=lcc ellps=clrk66 lat_1=18d49'N lon_0=71d30'W + x_0=500000 y_0=277063.657 k_0=0.99991102 + no_defs <> + # Honduras Norte + proj=lcc ellps=clrk66 lat_1=15d30'N lon_0=86d10'W + x_0=500000 y_0=296917.439 k_0=0.99993273 + no_defs <> + # Honduras Sud + proj=lcc ellps=clrk66 lat_1=13d47'N lon_0=87d10'W + x_0=500000 y_0=296215.903 k_0=0.99995140 + no_defs <> + # Levant + proj=lcc ellps=clrk66 lat_1=34d39'N lon_0=37d21'E + x_0=500000 y_0=300000 k_0=0.9996256 + no_defs <> + # Nicaragua Norte + proj=lcc ellps=clrk66 lat_1=13d52'N lon_0=85d30'W + x_0=500000 y_0=359891.816 k_0=0.99990314 + no_defs <> + # Nicaragua Sud + proj=lcc ellps=clrk66 lat_1=11d40'N lon_0=85d30'W + x_0=500000 y_0=288876.327 k_0=0.99992228 + no_defs <> + # Northwest Africa + proj=lcc ellps=clrk80 lat_1=34dN lon_0=0dE + x_0=1000000 y_0=500000 k_0=0.99908 + no_defs <> + # Palestine + proj=tmerc a=6378300.79 rf=293.488307656 + lat_0=31d44'2.749"N lon_0=35d12'43.490"E + x_0=170251.555 y_0=126867.909 k_0=1 + no_defs <> + # Panama + proj=lcc ellps=clrk66 lat_1=8d25'N lon_0=80dW + x_0=500000 y_0=294865.303 k_0=0.99989909 + no_defs <> +# other grids in DMA TM8358.1 + # British National Grid + proj=tmerc ellps=airy lat_0=49dN lon_0=2dW + k_0=0.9996012717 x_0=400000 y_0=-100000 + no_defs <> + # West Malaysian RSO Grid + proj=omerc a=6377295.66402 rf=300.8017 alpha=323d01'32.846" + no_uoff rot_conv lonc=102d15E lat_0=4dN k_0=0.99984 x_0=804670.240 y_0=0 + no_defs <> + # India Zone I + proj=lcc ellps=everest lon_0=68E lat_1=32d30'N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # India Zone IIA + proj=lcc ellps=everest lon_0=74E lat_1=26N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # India Zone IIB + proj=lcc ellps=everest lon_0=90E lat_1=26N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # India Zone IIIA + proj=lcc ellps=everest lon_0=80E lat_1=19N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # India Zone IIIB + proj=lcc ellps=everest lon_0=100E lat_1=19N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # India Zone IVA + proj=lcc ellps=everest lon_0=80E lat_1=12N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # India Zone IVB + proj=lcc ellps=everest lon_0=104E lat_1=12N + x_0=2743185.69 y_0=914395.23 k_0=.998786408 + no_defs <> + # Ceylon Belt + proj=tmerc ellps=everest lon_0=80d46'18.160"E lat_0=7d0'1.729"N + x_0=160933.56048 y_0=160933.56048 k_0=1. + no_defs <> + # Irish Transverse Mercator Grid + proj=tmerc ellps=mod_airy lat_0=53d30'N lon_0=8W + x_0=200000 y_0=250000 k_0=1.000035 + no_defs <> + # Netherlands East Indies Equitorial Zone + proj=merc ellps=bessel lon_0=110E + x_0=3900000 y_0=900000 k_0=0.997 + no_defs <> + # Nord Algerie Grid + proj=lcc ellps=clrk80 lon_0=2d42E lat_0=36N + x_0=500000 y_0=300000 k_0=0.999625544 + no_defs <> + # Nord Maroc Grid + proj=lcc ellps=clrk80 lon_0=5d24'W lat_0=33d18'N + x_0=500000 y_0=300000 k_0=0.999625769 + no_defs <> + # Nord Tunisie Grid + proj=lcc ellps=clrk80 lon_0=9d54E lat_0=36N + x_0=500000 y_0=300000 k_0=0.999625544 + no_defs <> + # Sud Algerie Grid + proj=lcc ellps=clrk80 lon_0=2d42E lat_0=33d18'N + x_0=500000 y_0=300000 k_0=0.999625769 + no_defs <> + # Sud Maroc Grid + proj=lcc ellps=clrk80 lon_0=5d24W lat_0=29d42'N + x_0=500000 y_0=300000 k_0=0.999615596 + no_defs <> + # Sud Tunisie Grid + proj=lcc ellps=clrk80 lon_0=9d54'E lat_0=33d18'N + x_0=500000 y_0=300000 k_0=0.999625769 + no_defs <> +# Gauss Krueger Grid for Germany +# +# The first figure of the easting is lon_0 devided by 3 +# ( 2 for 6d0E, 3 for 9d0E, 4 for 12d0E) +# For translations you have to remove this first figure +# and convert northings and eastings from km to meter . +# The other way round, devide by 1000 and add the figure. +# I made 3 entrys for the officially used grids in Germany +# +# +# Und nochmal in deutsch : +# Die erste Ziffer des Rechtswerts beschreibt den Hauptmeridian +# und ist dessen Gradzahl geteilt durch 3. +# Zum Umrechnen in Grad muss daher die erste Ziffer des Rechtswertes +# entfernt werden und evt. von km auf Metern umgerechnet werden. +# Zur Umrechnung in Gauss Krueger Koordinaten entsprechend die +# Ziffer fuer den Hauptmeridian vor dem Rechtswert ergaenzen. +# Ich hab fuer alle drei in Deutschland ueblichen Hauptmeridiane +# jeweils einen Eintrag ergaenzt. +# +# +# added by Michael Goepel +# + # Gauss Krueger Grid for Germany + proj=tmerc ellps=bessel lon_0=6d0E lat_0=0 + x_0=500000 + no_defs<> + # Gauss Krueger Grid for Germany + proj=tmerc ellps=bessel lon_0=9d0E lat_0=0 + x_0=500000 + no_defs<> + # Gauss Krueger Grid for Germany + proj=tmerc ellps=bessel lon_0=12d0E lat_0=0 + x_0=500000 + no_defs<> + diff --git a/proj4/nmake.opt b/proj4/nmake.opt new file mode 100644 index 000000000000..2291fad86c26 --- /dev/null +++ b/proj4/nmake.opt @@ -0,0 +1,42 @@ +!IFDEF EXT_NMAKE_OPT +!INCLUDE $(EXT_NMAKE_OPT) +!ENDIF + +# Directory tree where PROJ will be installed. +!IFNDEF INSTDIR +INSTDIR=C:\PROJ +!ENDIF + +# Set the following to the directory where the PROJ distribution data files +# (ie, the contents of ..\NAD) are to be installed. It is possible to later +# move the data files to another directory, and define the PROJ_LIB +# environment variable to point to that directory. It is also possible to +# have PROJ_LIB name the original NAD directory of the unpacked PROJ +# distribution. Any setting of the PROJ_LIB environment variable takes +# precedence at runtime over the setting of the PROJ_LIB_DIR macro stored in +# the compiled software. +!IFNDEF PROJ_LIB_DIR +PROJ_LIB_DIR=$(INSTDIR)\SHARE +!ENDIF + +# Uncomment the first for an optimized build, or the second for debug. +!IFNDEF OPTFLAGS +!IFNDEF DEBUG +OPTFLAGS= /Ox /Op /MD +!ELSE +OPTFLAGS= /Zi /MD /Fdproj.pdb +!ENDIF +!ENDIF + +!IFDEF SELFTEST +OPTFLAGS= $(OPTFLAGS) -DPJ_SELFTEST +!ENDIF + +# Uncomment the first for linking exes against DLL or second for static +EXE_PROJ = proj_i.lib +#EXE_PROJ = proj.lib + +# Set the version number for the DLL. Normally we leave this blank since +# we want software that is dynamically loading the DLL to have no problem +# with version numbers. +VERSION= diff --git a/proj4/proj.pc.in b/proj4/proj.pc.in new file mode 100644 index 000000000000..eb9b248cab5c --- /dev/null +++ b/proj4/proj.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: proj +Description: Cartographic Projections Library. +Requires: +Version: @VERSION@ +Libs: -L${libdir} -lproj +Cflags: -I${includedir} diff --git a/proj4/proj.spec b/proj4/proj.spec new file mode 100644 index 000000000000..98c3c834b7e3 --- /dev/null +++ b/proj4/proj.spec @@ -0,0 +1,50 @@ +%define PACKAGE_NAME proj +%define PACKAGE_VERSION 4.9.3 +%define PACKAGE_URL http://trac.osgeo.org/proj +%define _prefix /usr + +Summary: Cartographic projection software +Name: %PACKAGE_NAME +Version: %PACKAGE_VERSION +Release: 1 +Source0: proj-4.9.3.tar.gz +Copyright: MIT License, Copyright (c) 2000, Frank Warmerdam +Group: Applications/GIS +Vendor: Intevation GmbH +Distribution: FreeGIS CD + +BuildRoot: %{_builddir}/%{name}-root +Prefix: %{_prefix} + +Conflicts: PROJ.4 + +%description +This package offers commandline tools and a library for performing respective +forward and inverse transformation of cartographic data to or from cartesian +data with a wide range of selectable projection functions. + +%prep +%setup -D -n proj-4.9.3 +%configure + +%build +make + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall + +%clean +rm -rf %{_builddir}/proj-4.9.3 +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%{_libdir}/* +%{_bindir}/* +%{_includedir}/* +%{_datadir}/proj/* +%{_mandir}/man1/* +%{_mandir}/man3/* + +%doc AUTHORS COPYING ChangeLog NEWS README diff --git a/proj4/src/CMakeLists.txt b/proj4/src/CMakeLists.txt new file mode 100644 index 000000000000..8d7e7d1c7a40 --- /dev/null +++ b/proj4/src/CMakeLists.txt @@ -0,0 +1,46 @@ +# first include proj library +# always need +include(lib_proj.cmake) + +# configure executable build +option(BUILD_CS2CS "Build cs2cs (coordinate systems to coordinate systems translation tool)" ON) +option(BUILD_PROJ "Build proj (cartographic projection tool : latlong <-> projected coordinates" ON) +option(BUILD_GEOD "Build geod (computation of geodesic lines)" ON) +option(BUILD_NAD2BIN "Build nad2bin (format conversion tool) " ON) + +if(NOT MSVC) + if (NOT APPLE) + # Use relative path so that package is relocatable + set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${LIBDIR}") + else () + set (CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LIBDIR}") + # TO DO: cmake 2.8.12 introduces a way to make the install tree + # relocatable with OSX via + # (1) set(CMAKE_MACOSX_RPATH ON) and + # (2) setting the INSTALL_RPATH property on the executables to + # "@loader_path/../${LIBDIR}" + endif () +endif () + +if(BUILD_CS2CS) + include(bin_cs2cs.cmake) +endif(BUILD_CS2CS) + +if(BUILD_PROJ) + include(bin_proj.cmake) +endif(BUILD_PROJ) + +if(BUILD_GEOD) + include(bin_geod.cmake) + include(bin_geodtest.cmake) +endif(BUILD_GEOD) + +if(BUILD_NAD2BIN) + include(bin_nad2bin.cmake) +endif(BUILD_NAD2BIN) + +if (MSVC OR CMAKE_CONFIGURATION_TYPES) + # Add _d suffix for your debug versions of the tools + set_target_properties (cs2cs binproj geod nad2bin PROPERTIES + DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) +endif () diff --git a/proj4/src/Makefile.am b/proj4/src/Makefile.am new file mode 100644 index 000000000000..8acf27746e57 --- /dev/null +++ b/proj4/src/Makefile.am @@ -0,0 +1,81 @@ +AM_CFLAGS = @C_WFLAGS@ + +bin_PROGRAMS = proj nad2bin geod cs2cs +EXTRA_PROGRAMS = multistresstest test228 + +AM_CPPFLAGS = -DPROJ_LIB=\"$(pkgdatadir)\" \ + -DMUTEX_@MUTEX_SETTING@ @JNI_INCLUDE@ + +include_HEADERS = proj_api.h projects.h geodesic.h \ + org_proj4_Projections.h org_proj4_PJ.h + +EXTRA_DIST = makefile.vc proj.def bin_cs2cs.cmake \ + bin_geod.cmake bin_nad2bin.cmake bin_proj.cmake \ + lib_proj.cmake CMakeLists.txt bin_geodtest.cmake geodtest.c + +proj_SOURCES = proj.c gen_cheb.c p_series.c +cs2cs_SOURCES = cs2cs.c gen_cheb.c p_series.c +nad2bin_SOURCES = nad2bin.c +geod_SOURCES = geod.c geod_set.c geod_interface.c geod_interface.h +multistresstest_SOURCES = multistresstest.c +test228_SOURCES = test228.c + +proj_LDADD = libproj.la +cs2cs_LDADD = libproj.la +nad2bin_LDADD = libproj.la +geod_LDADD = libproj.la +multistresstest_LDADD = libproj.la @THREAD_LIB@ +test228_LDADD = libproj.la @THREAD_LIB@ + +lib_LTLIBRARIES = libproj.la + +libproj_la_LDFLAGS = -no-undefined -version-info 12:0:0 + +libproj_la_SOURCES = \ + pj_list.h \ + PJ_aeqd.c PJ_gnom.c PJ_laea.c PJ_mod_ster.c \ + PJ_nsper.c PJ_nzmg.c PJ_ortho.c PJ_stere.c PJ_sterea.c \ + PJ_aea.c PJ_bipc.c PJ_bonne.c PJ_eqdc.c PJ_isea.c \ + PJ_imw_p.c PJ_krovak.c PJ_lcc.c PJ_poly.c \ + PJ_rpoly.c PJ_sconics.c proj_rouss.c \ + PJ_cass.c PJ_cc.c PJ_cea.c PJ_eqc.c \ + PJ_gall.c PJ_labrd.c PJ_lsat.c PJ_misrsom.c PJ_merc.c \ + PJ_mill.c PJ_ocea.c PJ_omerc.c PJ_somerc.c \ + PJ_tcc.c PJ_tcea.c PJ_times.c PJ_tmerc.c \ + PJ_airy.c PJ_aitoff.c PJ_august.c PJ_bacon.c \ + PJ_chamb.c PJ_hammer.c PJ_lagrng.c PJ_larr.c \ + PJ_lask.c PJ_nocol.c PJ_ob_tran.c PJ_oea.c \ + PJ_tpeqd.c PJ_vandg.c PJ_vandg2.c PJ_vandg4.c \ + PJ_wag7.c PJ_lcca.c PJ_geos.c proj_etmerc.c \ + PJ_boggs.c PJ_collg.c PJ_comill.c PJ_crast.c PJ_denoy.c \ + PJ_eck1.c PJ_eck2.c PJ_eck3.c PJ_eck4.c \ + PJ_eck5.c PJ_fahey.c PJ_fouc_s.c PJ_gins8.c PJ_gstmerc.c \ + PJ_gn_sinu.c PJ_goode.c PJ_igh.c PJ_hatano.c PJ_loxim.c \ + PJ_mbt_fps.c PJ_mbtfpp.c PJ_mbtfpq.c PJ_moll.c \ + PJ_nell.c PJ_nell_h.c PJ_patterson.c PJ_putp2.c PJ_putp3.c \ + PJ_putp4p.c PJ_putp5.c PJ_putp6.c PJ_qsc.c PJ_robin.c \ + PJ_sch.c PJ_sts.c PJ_urm5.c PJ_urmfps.c PJ_wag2.c \ + PJ_wag3.c PJ_wink1.c PJ_wink2.c pj_latlong.c pj_geocent.c \ + aasincos.c adjlon.c bch2bps.c bchgen.c \ + biveval.c dmstor.c mk_cheby.c pj_auth.c \ + pj_deriv.c pj_ell_set.c pj_ellps.c pj_errno.c \ + pj_factors.c pj_fwd.c pj_init.c pj_inv.c pj_fwd3d.c pj_inv3d.c\ + pj_list.c pj_malloc.c pj_mlfn.c pj_msfn.c proj_mdist.c \ + pj_open_lib.c pj_param.c pj_phi2.c pj_pr_list.c \ + pj_qsfn.c pj_generic_selftest.c pj_run_selftests.c pj_strerrno.c \ + pj_tsfn.c pj_units.c pj_ctx.c pj_log.c pj_zpoly1.c rtodms.c \ + vector1.c pj_release.c pj_gauss.c \ + PJ_healpix.c PJ_natearth.c PJ_natearth2.c PJ_calcofi.c pj_fileapi.c \ + \ + pj_gc_reader.c pj_gridcatalog.c \ + nad_cvt.c nad_init.c nad_intr.c emess.c emess.h \ + pj_apply_gridshift.c pj_datums.c pj_datum_set.c pj_transform.c \ + geocent.c geocent.h pj_utils.c pj_gridinfo.c pj_gridlist.c \ + jniproj.c pj_mutex.c pj_initcache.c pj_apply_vgridshift.c geodesic.c \ + pj_strtod.c + +install-exec-local: + rm -f $(DESTDIR)$(bindir)/invproj$(EXEEXT) + (cd $(DESTDIR)$(bindir); ln -s proj$(EXEEXT) invproj$(EXEEXT)) + rm -f $(DESTDIR)$(bindir)/invgeod$(EXEEXT) + (cd $(DESTDIR)$(bindir); ln -s geod$(EXEEXT) invgeod$(EXEEXT)) diff --git a/proj4/src/PJ_aea.c b/proj4/src/PJ_aea.c new file mode 100644 index 000000000000..f30d3b6c1a79 --- /dev/null +++ b/proj4/src/PJ_aea.c @@ -0,0 +1,329 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the aea (Albers Equal Area) projection. + * and the leac (Lambert Equal Area Conic) projection + * Author: Gerald Evenden (1995) + * Thomas Knudsen (2016) - revise/add regression tests + * + ****************************************************************************** + * Copyright (c) 1995, Gerald 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 PJ_LIB__ +#include + +# define EPS10 1.e-10 +# define TOL7 1.e-7 + +PROJ_HEAD(aea, "Albers Equal Area") "\n\tConic Sph&Ell\n\tlat_1= lat_2="; +PROJ_HEAD(leac, "Lambert Equal Area Conic") "\n\tConic, Sph&Ell\n\tlat_1= south"; + + +/* determine latitude angle phi-1 */ +# define N_ITER 15 +# define EPSILON 1.0e-7 +# define TOL 1.0e-10 +static double phi1_(double qs, double Te, double Tone_es) { + int i; + double Phi, sinpi, cospi, con, com, dphi; + + Phi = asin (.5 * qs); + if (Te < EPSILON) + return( Phi ); + i = N_ITER; + do { + sinpi = sin (Phi); + cospi = cos (Phi); + con = Te * sinpi; + com = 1. - con * con; + dphi = .5 * com * com / cospi * (qs / Tone_es - + sinpi / com + .5 / Te * log ((1. - con) / + (1. + con))); + Phi += dphi; + } while (fabs(dphi) > TOL && --i); + return( i ? Phi : HUGE_VAL ); +} + + +struct pj_opaque { + double ec; + double n; + double c; + double dd; + double n2; + double rho0; + double rho; + double phi1; + double phi2; + double *en; + int ellips; +}; + + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoid/spheroid, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + if ((Q->rho = Q->c - (Q->ellips ? Q->n * pj_qsfn(sin(lp.phi), + P->e, P->one_es) : Q->n2 * sin(lp.phi))) < 0.) F_ERROR + Q->rho = Q->dd * sqrt(Q->rho); + xy.x = Q->rho * sin( lp.lam *= Q->n ); + xy.y = Q->rho0 - Q->rho * cos(lp.lam); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoid/spheroid, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + if( (Q->rho = hypot(xy.x, xy.y = Q->rho0 - xy.y)) != 0.0 ) { + if (Q->n < 0.) { + Q->rho = -Q->rho; + xy.x = -xy.x; + xy.y = -xy.y; + } + lp.phi = Q->rho / Q->dd; + if (Q->ellips) { + lp.phi = (Q->c - lp.phi * lp.phi) / Q->n; + if (fabs(Q->ec - fabs(lp.phi)) > TOL7) { + if ((lp.phi = phi1_(lp.phi, P->e, P->one_es)) == HUGE_VAL) + I_ERROR + } else + lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + } else if (fabs(lp.phi = (Q->c - lp.phi * lp.phi) / Q->n2) <= 1.) + lp.phi = asin(lp.phi); + else + lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + lp.lam = atan2(xy.x, xy.y) / Q->n; + } else { + lp.lam = 0.; + lp.phi = Q->n > 0. ? M_HALFPI : - M_HALFPI; + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ *setup(PJ *P) { + double cosphi, sinphi; + int secant; + struct pj_opaque *Q = P->opaque; + + P->inv = e_inverse; + P->fwd = e_forward; + + if (fabs(Q->phi1 + Q->phi2) < EPS10) E_ERROR(-21); + Q->n = sinphi = sin(Q->phi1); + cosphi = cos(Q->phi1); + secant = fabs(Q->phi1 - Q->phi2) >= EPS10; + if( (Q->ellips = (P->es > 0.))) { + double ml1, m1; + + if (!(Q->en = pj_enfn(P->es))) E_ERROR_0; + m1 = pj_msfn(sinphi, cosphi, P->es); + ml1 = pj_qsfn(sinphi, P->e, P->one_es); + if (secant) { /* secant cone */ + double ml2, m2; + + sinphi = sin(Q->phi2); + cosphi = cos(Q->phi2); + m2 = pj_msfn(sinphi, cosphi, P->es); + ml2 = pj_qsfn(sinphi, P->e, P->one_es); + Q->n = (m1 * m1 - m2 * m2) / (ml2 - ml1); + } + Q->ec = 1. - .5 * P->one_es * log((1. - P->e) / + (1. + P->e)) / P->e; + Q->c = m1 * m1 + Q->n * ml1; + Q->dd = 1. / Q->n; + Q->rho0 = Q->dd * sqrt(Q->c - Q->n * pj_qsfn(sin(P->phi0), + P->e, P->one_es)); + } else { + if (secant) Q->n = .5 * (Q->n + sin(Q->phi2)); + Q->n2 = Q->n + Q->n; + Q->c = cosphi * cosphi + Q->n2 * sinphi; + Q->dd = 1. / Q->n; + Q->rho0 = Q->dd * sqrt(Q->c - Q->n2 * sin(P->phi0)); + } + + return P; +} + + +PJ *PROJECTION(aea) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; + setup(P); + return P; +} + + +PJ *PROJECTION(leac) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->phi2 = pj_param(P->ctx, P->params, "rlat_1").f; + Q->phi1 = pj_param(P->ctx, P->params, "bsouth").i ? - M_HALFPI: M_HALFPI; + setup (P); + return P; +} + + +#ifndef PJ_SELFTEST +int pj_aea_selftest (void) {return 10000;} +#else + +int pj_aea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=aea +ellps=GRS80 +lat_1=0 +lat_2=2"}; + char s_args[] = {"+proj=aea +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222571.60875710563, 110653.32674302977}, + {222706.30650839131, -110484.26714439997}, + {-222571.60875710563, 110653.32674302977}, + {-222706.30650839131, -110484.26714439997}, + }; + + XY s_fwd_expect[] = { + {223334.08517088494, 111780.43188447191}, + {223470.15499168713, -111610.33943099028}, + {-223334.08517088494, 111780.43188447191}, + {-223470.15499168713, -111610.33943099028}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017966310597749514, 0.00090436885862202158}, + {0.0017966300767030448, -0.00090437009538581453}, + {-0.0017966310597749514, 0.00090436885862202158}, + {-0.0017966300767030448, -0.00090437009538581453}, + }; + + LP s_inv_expect[] = { + {0.0017904935979658752, 0.00089524594491375306}, + {0.0017904926216016812, -0.00089524716502493225}, + {-0.0017904935979658752, 0.00089524594491375306}, + {-0.0017904926216016812, -0.00089524716502493225}, + }; + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + +#ifndef PJ_SELFTEST +int pj_leac_selftest (void) {return 10000;} +#else + +int pj_leac_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=leac +ellps=GRS80 +lat_1=0 +lat_2=2"}; + char s_args[] = {"+proj=leac +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {220685.14054297868, 112983.50088939646}, + {224553.31227982609, -108128.63674487274}, + {-220685.14054297868, 112983.50088939646}, + {-224553.31227982609, -108128.63674487274}, + }; + + XY s_fwd_expect[] = { + {221432.86859285168, 114119.45452653214}, + {225331.72412711097, -109245.82943505641}, + {-221432.86859285168, 114119.45452653214}, + {-225331.72412711097, -109245.82943505641}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017966446840328458, 0.00090435171340223211}, + {0.0017966164523713021, -0.00090438724081843625}, + {-0.0017966446840328458, 0.00090435171340223211}, + {-0.0017966164523713021, -0.00090438724081843625}, + }; + + LP s_inv_expect[] = { + {0.0017905070979748127, 0.00089522906964877795}, + {0.001790479121519977, -0.00089526404022281043}, + {-0.0017905070979748127, 0.00089522906964877795}, + {-0.001790479121519977, -0.00089526404022281043}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif diff --git a/proj4/src/PJ_aeqd.c b/proj4/src/PJ_aeqd.c new file mode 100644 index 000000000000..d1dcdaa12e82 --- /dev/null +++ b/proj4/src/PJ_aeqd.c @@ -0,0 +1,370 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection. + * Author: Gerald Evenden + * + ****************************************************************************** + * Copyright (c) 1995, Gerald 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 PJ_LIB__ +#include "geodesic.h" +#include + +struct pj_opaque { + double sinph0; + double cosph0; + double *en; + double M1; + double N1; + double Mp; + double He; + double G; + int mode; + struct geod_geodesic g; +}; + +PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam"; + +#define EPS10 1.e-10 +#define TOL 1.e-14 + +#define N_POLE 0 +#define S_POLE 1 +#define EQUIT 2 +#define OBLIQ 3 + + +static XY e_guam_fwd(LP lp, PJ *P) { /* Guam elliptical */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosphi, sinphi, t; + + cosphi = cos(lp.phi); + sinphi = sin(lp.phi); + t = 1. / sqrt(1. - P->es * sinphi * sinphi); + xy.x = lp.lam * cosphi * t; + xy.y = pj_mlfn(lp.phi, sinphi, cosphi, Q->en) - Q->M1 + + .5 * lp.lam * lp.lam * cosphi * sinphi * t; + + return xy; +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, cosphi, sinphi, rho; + double azi1, azi2, s12; + double lam1, phi1, lam2, phi2; + + coslam = cos(lp.lam); + cosphi = cos(lp.phi); + sinphi = sin(lp.phi); + switch (Q->mode) { + case N_POLE: + coslam = - coslam; + case S_POLE: + xy.x = (rho = fabs(Q->Mp - pj_mlfn(lp.phi, sinphi, cosphi, Q->en))) * + sin(lp.lam); + xy.y = rho * coslam; + break; + case EQUIT: + case OBLIQ: + if (fabs(lp.lam) < EPS10 && fabs(lp.phi - P->phi0) < EPS10) { + xy.x = xy.y = 0.; + break; + } + + phi1 = P->phi0 / DEG_TO_RAD; lam1 = P->lam0 / DEG_TO_RAD; + phi2 = lp.phi / DEG_TO_RAD; lam2 = (lp.lam+P->lam0) / DEG_TO_RAD; + + geod_inverse(&Q->g, phi1, lam1, phi2, lam2, &s12, &azi1, &azi2); + azi1 *= DEG_TO_RAD; + xy.x = s12 * sin(azi1) / P->a; + xy.y = s12 * cos(azi1) / P->a; + break; + } + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, cosphi, sinphi; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + switch (Q->mode) { + case EQUIT: + xy.y = cosphi * coslam; + goto oblcon; + case OBLIQ: + xy.y = Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam; +oblcon: + if (fabs(fabs(xy.y) - 1.) < TOL) + if (xy.y < 0.) + F_ERROR + else + xy.x = xy.y = 0.; + else { + xy.y = acos(xy.y); + xy.y /= sin(xy.y); + xy.x = xy.y * cosphi * sin(lp.lam); + xy.y *= (Q->mode == EQUIT) ? sinphi : + Q->cosph0 * sinphi - Q->sinph0 * cosphi * coslam; + } + break; + case N_POLE: + lp.phi = -lp.phi; + coslam = -coslam; + case S_POLE: + if (fabs(lp.phi - M_HALFPI) < EPS10) F_ERROR; + xy.x = (xy.y = (M_HALFPI + lp.phi)) * sin(lp.lam); + xy.y *= coslam; + break; + } + return xy; +} + + +static LP e_guam_inv(XY xy, PJ *P) { /* Guam elliptical */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double x2, t; + int i; + + x2 = 0.5 * xy.x * xy.x; + lp.phi = P->phi0; + for (i = 0; i < 3; ++i) { + t = P->e * sin(lp.phi); + lp.phi = pj_inv_mlfn(P->ctx, Q->M1 + xy.y - + x2 * tan(lp.phi) * (t = sqrt(1. - t * t)), P->es, Q->en); + } + lp.lam = xy.x * t / cos(lp.phi); + return lp; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double c; + double azi1, azi2, s12, x2, y2, lat1, lon1, lat2, lon2; + + if ((c = hypot(xy.x, xy.y)) < EPS10) { + lp.phi = P->phi0; + lp.lam = 0.; + return (lp); + } + if (Q->mode == OBLIQ || Q->mode == EQUIT) { + + x2 = xy.x * P->a; + y2 = xy.y * P->a; + lat1 = P->phi0 / DEG_TO_RAD; + lon1 = P->lam0 / DEG_TO_RAD; + azi1 = atan2(x2, y2) / DEG_TO_RAD; + s12 = sqrt(x2 * x2 + y2 * y2); + geod_direct(&Q->g, lat1, lon1, azi1, s12, &lat2, &lon2, &azi2); + lp.phi = lat2 * DEG_TO_RAD; + lp.lam = lon2 * DEG_TO_RAD; + lp.lam -= P->lam0; + } else { /* Polar */ + lp.phi = pj_inv_mlfn(P->ctx, Q->mode == N_POLE ? Q->Mp - c : Q->Mp + c, + P->es, Q->en); + lp.lam = atan2(xy.x, Q->mode == N_POLE ? -xy.y : xy.y); + } + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosc, c_rh, sinc; + + if ((c_rh = hypot(xy.x, xy.y)) > M_PI) { + if (c_rh - EPS10 > M_PI) I_ERROR; + c_rh = M_PI; + } else if (c_rh < EPS10) { + lp.phi = P->phi0; + lp.lam = 0.; + return (lp); + } + if (Q->mode == OBLIQ || Q->mode == EQUIT) { + sinc = sin(c_rh); + cosc = cos(c_rh); + if (Q->mode == EQUIT) { + lp.phi = aasin(P->ctx, xy.y * sinc / c_rh); + xy.x *= sinc; + xy.y = cosc * c_rh; + } else { + lp.phi = aasin(P->ctx,cosc * Q->sinph0 + xy.y * sinc * Q->cosph0 / + c_rh); + xy.y = (cosc - Q->sinph0 * sin(lp.phi)) * c_rh; + xy.x *= sinc * Q->cosph0; + } + lp.lam = xy.y == 0. ? 0. : atan2(xy.x, xy.y); + } else if (Q->mode == N_POLE) { + lp.phi = M_HALFPI - c_rh; + lp.lam = atan2(xy.x, -xy.y); + } else { + lp.phi = c_rh - M_HALFPI; + lp.lam = atan2(xy.x, xy.y); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + if (P->opaque->en) + pj_dealloc(P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(aeqd) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + geod_init(&Q->g, P->a, P->es / (1 + sqrt(P->one_es))); + P->phi0 = pj_param(P->ctx, P->params, "rlat_0").f; + if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) { + Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; + Q->sinph0 = P->phi0 < 0. ? -1. : 1.; + Q->cosph0 = 0.; + } else if (fabs(P->phi0) < EPS10) { + Q->mode = EQUIT; + Q->sinph0 = 0.; + Q->cosph0 = 1.; + } else { + Q->mode = OBLIQ; + Q->sinph0 = sin(P->phi0); + Q->cosph0 = cos(P->phi0); + } + if (! P->es) { + P->inv = s_inverse; + P->fwd = s_forward; + } else { + if (!(Q->en = pj_enfn(P->es))) E_ERROR_0; + if (pj_param(P->ctx, P->params, "bguam").i) { + Q->M1 = pj_mlfn(P->phi0, Q->sinph0, Q->cosph0, Q->en); + P->inv = e_guam_inv; + P->fwd = e_guam_fwd; + } else { + switch (Q->mode) { + case N_POLE: + Q->Mp = pj_mlfn(M_HALFPI, 1., 0., Q->en); + break; + case S_POLE: + Q->Mp = pj_mlfn(-M_HALFPI, -1., 0., Q->en); + break; + case EQUIT: + case OBLIQ: + P->inv = e_inverse; P->fwd = e_forward; + Q->N1 = 1. / sqrt(1. - P->es * Q->sinph0 * Q->sinph0); + Q->G = Q->sinph0 * (Q->He = P->e / sqrt(P->one_es)); + Q->He *= Q->cosph0; + break; + } + P->inv = e_inverse; + P->fwd = e_forward; + } + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_aeqd_selftest (void) {return 0;} +#else + +int pj_aeqd_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=aeqd +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=aeqd +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222616.522190051648, 110596.996549550197}, + { 222616.522190051648, -110596.996549550211}, + {-222616.522190051648, 110596.996549550197}, + {-222616.522190051648, -110596.996549550211}, + }; + + XY s_fwd_expect[] = { + { 223379.456047271, 111723.757570854126}, + { 223379.456047271, -111723.757570854126}, + {-223379.456047271, 111723.757570854126}, + {-223379.456047271, -111723.757570854126}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179663056838724787, 0.000904369476930248902}, + { 0.00179663056838724787, -0.000904369476930248469}, + {-0.00179663056838724787, 0.000904369476930248902}, + {-0.00179663056838724787, -0.000904369476930248469}, + }; + + LP s_inv_expect[] = { + { 0.00179049310992953335, 0.000895246554746200623}, + { 0.00179049310992953335, -0.000895246554746200623}, + {-0.00179049310992953335, 0.000895246554746200623}, + {-0.00179049310992953335, -0.000895246554746200623}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_airy.c b/proj4/src/PJ_airy.c new file mode 100644 index 000000000000..3a91986ed5a8 --- /dev/null +++ b/proj4/src/PJ_airy.c @@ -0,0 +1,186 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the airy (Airy) projection. + * Author: Gerald Evenden (1995) + * Thomas Knudsen (2016) - revise/add regression tests + * + ****************************************************************************** + * Copyright (c) 1995, Gerald 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 PJ_LIB__ +#include + +PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b="; + + +struct pj_opaque { + double p_halfpi; + double sinph0; + double cosph0; + double Cb; + int mode; + int no_cut; /* do not cut at hemisphere limit */ +}; + + +# define EPS 1.e-10 +# define N_POLE 0 +# define S_POLE 1 +# define EQUIT 2 +# define OBLIQ 3 + + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz; + + sinlam = sin(lp.lam); + coslam = cos(lp.lam); + switch (Q->mode) { + case EQUIT: + case OBLIQ: + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + cosz = cosphi * coslam; + if (Q->mode == OBLIQ) + cosz = Q->sinph0 * sinphi + Q->cosph0 * cosz; + if (!Q->no_cut && cosz < -EPS) + F_ERROR; + if (fabs(s = 1. - cosz) > EPS) { + t = 0.5 * (1. + cosz); + Krho = -log(t)/s - Q->Cb / t; + } else + Krho = 0.5 - Q->Cb; + xy.x = Krho * cosphi * sinlam; + if (Q->mode == OBLIQ) + xy.y = Krho * (Q->cosph0 * sinphi - + Q->sinph0 * cosphi * coslam); + else + xy.y = Krho * sinphi; + break; + case S_POLE: + case N_POLE: + lp.phi = fabs(Q->p_halfpi - lp.phi); + if (!Q->no_cut && (lp.phi - EPS) > M_HALFPI) + F_ERROR; + if ((lp.phi *= 0.5) > EPS) { + t = tan(lp.phi); + Krho = -2.*(log(cos(lp.phi)) / t + t * Q->Cb); + xy.x = Krho * sinlam; + xy.y = Krho * coslam; + if (Q->mode == N_POLE) + xy.y = -xy.y; + } else + xy.x = xy.y = 0.; + } + return xy; +} + + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(airy) { + double beta; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + + P->opaque = Q; + + Q->no_cut = pj_param(P->ctx, P->params, "bno_cut").i; + beta = 0.5 * (M_HALFPI - pj_param(P->ctx, P->params, "rlat_b").f); + if (fabs(beta) < EPS) + Q->Cb = -0.5; + else { + Q->Cb = 1./tan(beta); + Q->Cb *= Q->Cb * log(cos(beta)); + } + + if (fabs(fabs(P->phi0) - M_HALFPI) < EPS) + if (P->phi0 < 0.) { + Q->p_halfpi = -M_HALFPI; + Q->mode = S_POLE; + } else { + Q->p_halfpi = M_HALFPI; + Q->mode = N_POLE; + } + else { + if (fabs(P->phi0) < EPS) + Q->mode = EQUIT; + else { + Q->mode = OBLIQ; + Q->sinph0 = sin(P->phi0); + Q->cosph0 = cos(P->phi0); + } + } + P->fwd = s_forward; + P->es = 0.; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_airy_selftest (void) {return 0;} +#else + +int pj_airy_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=airy +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 189109.88690862127, 94583.752387504152}, + { 189109.88690862127, -94583.752387504152}, + {-189109.88690862127, 94583.752387504152}, + {-189109.88690862127, -94583.752387504152}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 0, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + +#endif diff --git a/proj4/src/PJ_aitoff.c b/proj4/src/PJ_aitoff.c new file mode 100644 index 000000000000..5cd717b10b69 --- /dev/null +++ b/proj4/src/PJ_aitoff.c @@ -0,0 +1,293 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel) + * projections. + * Author: Gerald Evenden (1995) + * Drazen Tutic, Lovro Gradiser (2015) - add inverse + * Thomas Knudsen (2016) - revise/add regression tests + * + ****************************************************************************** + * Copyright (c) 1995, Gerald 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 PJ_LIB__ +#include + + +struct pj_opaque { + double cosphi1; + int mode; +}; + + +PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph"; +PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1"; + + + +#if 0 +FORWARD(s_forward); /* spheroid */ +#endif + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double c, d; + + 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 (Q->mode) { /* Winkel Tripel */ + xy.x = (xy.x + lp.lam * Q->cosphi1) * 0.5; + xy.y = (xy.y + lp.phi) * 0.5; + } + return (xy); +} + +/*********************************************************************************** +* +* Inverse functions added by Drazen Tutic and Lovro Gradiser based on paper: +* +* I.Özbug Biklirici and Cengizhan Ipbüker. A General Algorithm for the Inverse +* Transformation of Map Projections Using Jacobian Matrices. In Proceedings of the +* Third International Symposium Mathematical & Computational Applications, +* pages 175{182, Turkey, September 2002. +* +* Expected accuracy is defined by EPSILON = 1e-12. Should be appropriate for +* most applications of Aitoff and Winkel Tripel projections. +* +* Longitudes of 180W and 180E can be mixed in solution obtained. +* +* Inverse for Aitoff projection in poles is undefined, longitude value of 0 is assumed. +* +* Contact : dtutic@geof.hr +* Date: 2015-02-16 +* +************************************************************************************/ + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + int iter, MAXITER = 10, round = 0, MAXROUND = 20; + double EPSILON = 1e-12, D, C, f1, f2, f1p, f1l, f2p, f2l, dp, dl, sl, sp, cp, cl, x, y; + + if ((fabs(xy.x) < EPSILON) && (fabs(xy.y) < EPSILON )) { lp.phi = 0.; lp.lam = 0.; return lp; } + + /* intial values for Newton-Raphson method */ + lp.phi = xy.y; lp.lam = xy.x; + do { + iter = 0; + do { + sl = sin(lp.lam * 0.5); cl = cos(lp.lam * 0.5); + sp = sin(lp.phi); cp = cos(lp.phi); + D = cp * cl; + C = 1. - D * D; + D = acos(D) / pow(C, 1.5); + f1 = 2. * D * C * cp * sl; + f2 = D * C * sp; + f1p = 2.* (sl * cl * sp * cp / C - D * sp * sl); + f1l = cp * cp * sl * sl / C + D * cp * cl * sp * sp; + f2p = sp * sp * cl / C + D * sl * sl * cp; + f2l = 0.5 * (sp * cp * sl / C - D * sp * cp * cp * sl * cl); + if (Q->mode) { /* Winkel Tripel */ + f1 = 0.5 * (f1 + lp.lam * Q->cosphi1); + f2 = 0.5 * (f2 + lp.phi); + f1p *= 0.5; + f1l = 0.5 * (f1l + Q->cosphi1); + f2p = 0.5 * (f2p + 1.); + f2l *= 0.5; + } + f1 -= xy.x; f2 -= xy.y; + dl = (f2 * f1p - f1 * f2p) / (dp = f1p * f2l - f2p * f1l); + dp = (f1 * f2l - f2 * f1l) / dp; + while (dl > M_PI) dl -= M_PI; /* set to interval [-M_PI, M_PI] */ + while (dl < -M_PI) dl += M_PI; /* set to interval [-M_PI, M_PI] */ + lp.phi -= dp; lp.lam -= dl; + } while ((fabs(dp) > EPSILON || fabs(dl) > EPSILON) && (iter++ < MAXITER)); + if (lp.phi > M_PI_2) lp.phi -= 2.*(lp.phi-M_PI_2); /* correct if symmetrical solution for Aitoff */ + if (lp.phi < -M_PI_2) lp.phi -= 2.*(lp.phi+M_PI_2); /* correct if symmetrical solution for Aitoff */ + if ((fabs(fabs(lp.phi) - M_PI_2) < EPSILON) && (!Q->mode)) lp.lam = 0.; /* if pole in Aitoff, return longitude of 0 */ + + /* calculate x,y coordinates with solution obtained */ + if((D = acos(cos(lp.phi) * cos(C = 0.5 * lp.lam)))) {/* Aitoff */ + x = 2. * D * cos(lp.phi) * sin(C) * (y = 1. / sin(D)); + y *= D * sin(lp.phi); + } else + x = y = 0.; + if (Q->mode) { /* Winkel Tripel */ + x = (x + lp.lam * Q->cosphi1) * 0.5; + y = (y + lp.phi) * 0.5; + } + /* if too far from given values of x,y, repeat with better approximation of phi,lam */ + } while (((fabs(xy.x-x) > EPSILON) || (fabs(xy.y-y) > EPSILON)) && (round++ < MAXROUND)); + + if (iter == MAXITER && round == MAXROUND) fprintf(stderr, "Warning: Accuracy of 1e-12 not reached. Last increments: dlat=%e and dlon=%e\n", dp, dl); + + return lp; +} + + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +static PJ *setup(PJ *P) { + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + return P; +} + + +PJ *PROJECTION(aitoff) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->mode = 0; + return setup(P); +} + + +PJ *PROJECTION(wintri) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->mode = 1; + if (pj_param(P->ctx, P->params, "tlat_1").i) { + if ((Q->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f)) == 0.) + E_ERROR(-22) + } + else /* 50d28' or acos(2/pi) */ + Q->cosphi1 = 0.636619772367581343; + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_aitoff_selftest (void) {return 0;} +#else + +int pj_aitoff_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=aitoff +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + + XY s_fwd_expect[] = { + {223379.45881169615, 111706.74288385305}, + {223379.45881169615, -111706.74288385305}, + {-223379.45881169615, 111706.74288385305}, + {-223379.45881169615, -111706.74288385305}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + + LP s_inv_expect[] = { + {0.0017904931100388164, 0.00089524655491012516}, + {0.0017904931100388164, -0.00089524655491012516}, + {-0.0017904931100388164, 0.00089524655491012516}, + {-0.0017904931100388164, -0.00089524655491012516}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + + + +#ifndef PJ_SELFTEST +int pj_wintri_selftest (void) {return 0;} +#else + +int pj_wintri_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wintri +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223390.80153348515, 111703.90750574505}, + {223390.80153348515, -111703.90750574505}, + {-223390.80153348515, 111703.90750574505}, + {-223390.80153348515, -111703.90750574505}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.0017904931099113196, 0.00089524655490101819}, + {0.0017904931099113196, -0.00089524655490101819}, + {-0.0017904931099113196, 0.00089524655490101819}, + {-0.0017904931099113196, -0.00089524655490101819}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_august.c b/proj4/src/PJ_august.c new file mode 100644 index 000000000000..f50289386726 --- /dev/null +++ b/proj4/src/PJ_august.c @@ -0,0 +1,71 @@ +#define PJ_LIB__ +#include + + +PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv."; +#define M 1.333333333333333 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double t, c1, c, x1, x12, y1, y12; + (void) P; + + t = tan(.5 * lp.phi); + c1 = sqrt(1. - t * t); + c = 1. + c1 * cos(lp.lam *= .5); + x1 = sin(lp.lam) * c1 / c; + y1 = t / c; + xy.x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 * y1)); + xy.y = M * y1 * (3. + 3. * x12 - y12); + return (xy); +} + + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(august) { + P->inv = 0; + P->fwd = s_forward; + P->es = 0.; + return P; +} + +#ifndef PJ_SELFTEST +int pj_august_selftest (void) {return 0;} +#else + +int pj_august_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=august +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223404.97818097242, 111722.34028976287}, + {223404.97818097242, -111722.34028976287}, + {-223404.97818097242, 111722.34028976287}, + {-223404.97818097242, -111722.34028976287}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_bacon.c b/proj4/src/PJ_bacon.c new file mode 100644 index 000000000000..a9c6da444d33 --- /dev/null +++ b/proj4/src/PJ_bacon.c @@ -0,0 +1,179 @@ +# define HLFPI2 2.46740110027233965467 /* (pi/2)^2 */ +# define EPS 1e-10 +#define PJ_LIB__ +#include + + +struct pj_opaque { + int bacn; + int ortl; +}; + +PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv."; +PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv."; +PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv."; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double ax, f; + + xy.y = Q->bacn ? M_HALFPI * sin(lp.phi) : lp.phi; + if ((ax = fabs(lp.lam)) >= EPS) { + if (Q->ortl && ax >= M_HALFPI) + xy.x = sqrt(HLFPI2 - lp.phi * lp.phi + EPS) + ax - M_HALFPI; + else { + f = 0.5 * (HLFPI2 / ax + ax); + xy.x = ax - f + sqrt(f * f - xy.y * xy.y); + } + if (lp.lam < 0.) xy.x = - xy.x; + } else + xy.x = 0.; + return (xy); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(bacon) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->bacn = 1; + Q->ortl = 0; + P->es = 0.; + P->fwd = s_forward; + return P; +} + + +PJ *PROJECTION(apian) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->bacn = Q->ortl = 0; + P->es = 0.; + P->fwd = s_forward; + return P; +} + + +PJ *PROJECTION(ortel) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->bacn = 0; + Q->ortl = 1; + P->es = 0.; + P->fwd = s_forward; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_bacon_selftest (void) {return 0;} +#else +int pj_bacon_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=bacon +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223334.13255596498, 175450.72592266591}, + {223334.13255596498, -175450.72592266591}, + {-223334.13255596498, 175450.72592266591}, + {-223334.13255596498, -175450.72592266591}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 0, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif + + + + +#ifndef PJ_SELFTEST +int pj_apian_selftest (void) {return 0;} +#else +int pj_apian_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=apian +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223374.57735525275, 111701.07212763709}, + { 223374.57735525275, -111701.07212763709}, + {-223374.57735525275, 111701.07212763709}, + {-223374.57735525275, -111701.07212763709}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 0, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif + + + + +#ifndef PJ_SELFTEST +int pj_ortel_selftest (void) {return 0;} +#else +int pj_ortel_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=ortel +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223374.57735525275, 111701.07212763709}, + { 223374.57735525275, -111701.07212763709}, + {-223374.57735525275, 111701.07212763709}, + {-223374.57735525275, -111701.07212763709}, + }; + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 0, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif + diff --git a/proj4/src/PJ_bipc.c b/proj4/src/PJ_bipc.c new file mode 100644 index 000000000000..f370b4f9bb34 --- /dev/null +++ b/proj4/src/PJ_bipc.c @@ -0,0 +1,224 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") "\n\tConic Sph."; + +# define EPS 1e-10 +# define EPS10 1e-10 +# define ONEEPS 1.000000001 +# define NITER 10 +# define lamB -.34894976726250681539 +# define n .63055844881274687180 +# define F 1.89724742567461030582 +# define Azab .81650043674686363166 +# define Azba 1.82261843856185925133 +# define T 1.27246578267089012270 +# define rhoc 1.20709121521568721927 +# define cAzc .69691523038678375519 +# define sAzc .71715351331143607555 +# define C45 .70710678118654752469 +# define S45 .70710678118654752410 +# define C20 .93969262078590838411 +# define S20 -.34202014332566873287 +# define R110 1.91986217719376253360 +# define R104 1.81514242207410275904 + + +struct pj_opaque { + int noskew; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r; + int tag; + + cphi = cos(lp.phi); + sphi = sin(lp.phi); + cdlam = cos(sdlam = lamB - lp.lam); + sdlam = sin(sdlam); + if (fabs(fabs(lp.phi) - M_HALFPI) < EPS10) { + Az = lp.phi < 0. ? M_PI : 0.; + tphi = HUGE_VAL; + } else { + tphi = sphi / cphi; + Az = atan2(sdlam , C45 * (tphi - cdlam)); + } + if( (tag = (Az > Azba)) ) { + cdlam = cos(sdlam = lp.lam + R110); + sdlam = sin(sdlam); + z = S20 * sphi + C20 * cphi * cdlam; + if (fabs(z) > 1.) { + if (fabs(z) > ONEEPS) F_ERROR + else z = z < 0. ? -1. : 1.; + } else + z = acos(z); + if (tphi != HUGE_VAL) + Az = atan2(sdlam, (C20 * tphi - S20 * cdlam)); + Av = Azab; + xy.y = rhoc; + } else { + z = S45 * (sphi + cphi * cdlam); + if (fabs(z) > 1.) { + if (fabs(z) > ONEEPS) F_ERROR + else z = z < 0. ? -1. : 1.; + } else + z = acos(z); + Av = Azba; + xy.y = -rhoc; + } + if (z < 0.) F_ERROR; + r = F * (t = pow(tan(.5 * z), n)); + if ((al = .5 * (R104 - z)) < 0.) F_ERROR; + al = (t + pow(al, n)) / T; + if (fabs(al) > 1.) { + if (fabs(al) > ONEEPS) F_ERROR + else al = al < 0. ? -1. : 1.; + } else + al = acos(al); + if (fabs(t = n * (Av - Az)) < al) + r /= cos(al + (tag ? t : -t)); + xy.x = r * sin(t); + xy.y += (tag ? -r : r) * cos(t); + if (Q->noskew) { + t = xy.x; + xy.x = -xy.x * cAzc - xy.y * sAzc; + xy.y = -xy.y * cAzc + t * sAzc; + } + return (xy); +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double t, r, rp, rl, al, z, fAz, Az, s, c, Av; + int neg, i; + + if (Q->noskew) { + t = xy.x; + xy.x = -xy.x * cAzc + xy.y * sAzc; + xy.y = -xy.y * cAzc - t * sAzc; + } + if( (neg = (xy.x < 0.)) ) { + xy.y = rhoc - xy.y; + s = S20; + c = C20; + Av = Azab; + } else { + xy.y += rhoc; + s = S45; + c = C45; + Av = Azba; + } + rl = rp = r = hypot(xy.x, xy.y); + fAz = fabs(Az = atan2(xy.x, xy.y)); + for (i = NITER; i ; --i) { + z = 2. * atan(pow(r / F,1 / n)); + al = acos((pow(tan(.5 * z), n) + + pow(tan(.5 * (R104 - z)), n)) / T); + if (fAz < al) + r = rp * cos(al + (neg ? Az : -Az)); + if (fabs(rl - r) < EPS) + break; + rl = r; + } + if (! i) I_ERROR; + Az = Av - Az / n; + lp.phi = asin(s * cos(z) + c * sin(z) * cos(Az)); + lp.lam = atan2(sin(Az), c / tan(z) - s * cos(Az)); + if (neg) + lp.lam -= R110; + else + lp.lam = lamB - lp.lam; + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(bipc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->noskew = pj_param(P->ctx, P->params, "bns").i; + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_bipc_selftest (void) {return 0;} +#else + +int pj_bipc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=bipc +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=bipc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {2452160.2177257561, -14548450.759654747}, + {2447915.213725341, -14763427.21279873}, + {2021695.5229349085, -14540413.695283702}, + {2018090.5030046992, -14755620.651414108}, + }; + + XY s_fwd_expect[] = { + {2460565.7409749646, -14598319.9893308}, + {2456306.1859352002, -14814033.339502094}, + {2028625.4978190989, -14590255.375482792}, + {2025008.1205891429, -14806200.018759441}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {-73.038700284978702, 17.248118466239116}, + {-73.03730373933017, 17.249414978178777}, + {-73.03589317304332, 17.245536403008771}, + {-73.034496627213585, 17.246832895573739}, + }; + + LP s_inv_expect[] = { + {-73.038693104942126, 17.248116270440242}, + {-73.037301330021322, 17.24940835333777}, + {-73.035895582251086, 17.245543027866539}, + {-73.034503807150301, 17.246835091521532}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_boggs.c b/proj4/src/PJ_boggs.c new file mode 100644 index 000000000000..8ede9f16b01b --- /dev/null +++ b/proj4/src/PJ_boggs.c @@ -0,0 +1,77 @@ +#define PJ_LIB__ +# include +PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl., no inv., Sph."; +# define NITER 20 +# define EPS 1e-7 +# define ONETOL 1.000001 +# define FXC 2.00276 +# define FXC2 1.11072 +# define FYC 0.49931 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double theta, th1, c; + int i; + (void) P; + + theta = lp.phi; + if (fabs(fabs(lp.phi) - M_HALFPI) < EPS) + xy.x = 0.; + else { + c = sin(theta) * M_PI; + for (i = NITER; i; --i) { + theta -= th1 = (theta + sin(theta) - c) / + (1. + cos(theta)); + if (fabs(th1) < EPS) break; + } + theta *= 0.5; + xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta)); + } + xy.y = FYC * (lp.phi + M_SQRT2 * sin(theta)); + return (xy); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(boggs) { + P->es = 0.; + P->fwd = s_forward; + return P; +} + +#ifndef PJ_SELFTEST +int pj_boggs_selftest (void) {return 0;} +#else +int pj_boggs_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=boggs +a=6400000 +lat_1=0 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 211949.70080818201, 117720.99830541089}, + { 211949.70080818201, -117720.99830541089}, + {-211949.70080818201, 117720.99830541089}, + {-211949.70080818201, -117720.99830541089}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 0, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif diff --git a/proj4/src/PJ_bonne.c b/proj4/src/PJ_bonne.c new file mode 100644 index 000000000000..ac2249f82cd6 --- /dev/null +++ b/proj4/src/PJ_bonne.c @@ -0,0 +1,180 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") + "\n\tConic Sph&Ell\n\tlat_1="; +#define EPS10 1e-10 + +struct pj_opaque { + double phi1; + double cphi1; + double am1; + double m1; + double *en; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rh, E, c; + + rh = Q->am1 + Q->m1 - pj_mlfn(lp.phi, E = sin(lp.phi), c = cos(lp.phi), Q->en); + E = c * lp.lam / (rh * sqrt(1. - P->es * E * E)); + xy.x = rh * sin(E); + xy.y = Q->am1 - rh * cos(E); + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double E, rh; + + rh = Q->cphi1 + Q->phi1 - lp.phi; + if (fabs(rh) > EPS10) { + xy.x = rh * sin(E = lp.lam * cos(lp.phi) / rh); + xy.y = Q->cphi1 - rh * cos(E); + } else + xy.x = xy.y = 0.; + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rh; + + rh = hypot(xy.x, xy.y = Q->cphi1 - xy.y); + lp.phi = Q->cphi1 + Q->phi1 - rh; + if (fabs(lp.phi) > M_HALFPI) I_ERROR; + if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) + lp.lam = 0.; + else + lp.lam = rh * atan2(xy.x, xy.y) / cos(lp.phi); + return lp; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double s, rh; + + rh = hypot(xy.x, xy.y = Q->am1 - xy.y); + lp.phi = pj_inv_mlfn(P->ctx, Q->am1 + Q->m1 - rh, P->es, Q->en); + if ((s = fabs(lp.phi)) < M_HALFPI) { + s = sin(lp.phi); + lp.lam = rh * atan2(xy.x, xy.y) * + sqrt(1. - P->es * s * s) / cos(lp.phi); + } else if (fabs(s - M_HALFPI) <= EPS10) + lp.lam = 0.; + else I_ERROR; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(bonne) { + double c; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + if (fabs(Q->phi1) < EPS10) E_ERROR(-23); + if (P->es) { + Q->en = pj_enfn(P->es); + Q->m1 = pj_mlfn(Q->phi1, Q->am1 = sin(Q->phi1), + c = cos(Q->phi1), Q->en); + Q->am1 = c / (sqrt(1. - P->es * Q->am1 * Q->am1) * Q->am1); + P->inv = e_inverse; + P->fwd = e_forward; + } else { + if (fabs(Q->phi1) + EPS10 >= M_HALFPI) + Q->cphi1 = 0.; + else + Q->cphi1 = 1. / tan(Q->phi1); + P->inv = s_inverse; + P->fwd = s_forward; + } + return P; +} + + +#ifndef PJ_SELFTEST +int pj_bonne_selftest (void) {return 0;} +#else +int pj_bonne_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=bonne +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=bonne +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222605.29609715697, 55321.139565494814}, + { 222605.29609923941, -165827.64779905154}, + {-222605.29609715697, 55321.139565494814}, + {-222605.29609923941, -165827.64779905154}, + }; + + XY s_fwd_expect[] = { + { 223368.11557252839, 55884.555246393575}, + { 223368.11557463196, -167517.59936969393}, + {-223368.11557252839, 55884.555246393575}, + {-223368.11557463196, -167517.59936969393}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966987691132891, 0.50090436853737497}, + { 0.0017966982774478867, 0.4990956309655612}, + {-0.0017966987691132891, 0.50090436853737497}, + {-0.0017966982774478867, 0.4990956309655612}, + }; + + LP s_inv_expect[] = { + { 0.0017905615332457991, 0.50089524631087834}, + { 0.0017905610449335603, 0.49910475320072978}, + {-0.0017905615332457991, 0.50089524631087834}, + {-0.0017905610449335603, 0.49910475320072978}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_calcofi.c b/proj4/src/PJ_calcofi.c new file mode 100644 index 000000000000..b9a8ca22f8c7 --- /dev/null +++ b/proj4/src/PJ_calcofi.c @@ -0,0 +1,226 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(calcofi, + "Cal Coop Ocean Fish Invest Lines/Stations") "\n\tCyl, Sph&Ell"; + +#include +#include +#include +#include +#include + +/* Conversions for the California Cooperative Oceanic Fisheries Investigations +Line/Station coordinate system following the algorithm of: +Eber, L.E., and R.P. Hewitt. 1979. Conversion algorithms for the CALCOFI +station grid. California Cooperative Oceanic Fisheries Investigations Reports +20:135-137. (corrected for typographical errors). +http://www.calcofi.org/publications/calcofireports/v20/Vol_20_Eber___Hewitt.pdf +They assume 1 unit of CalCOFI Line == 1/5 degree in longitude or +meridional units at reference point O, and similarly 1 unit of CalCOFI +Station == 1/15 of a degree at O. +By convention, CalCOFI Line/Station conversions use Clarke 1866 but we use +whatever ellipsoid is provided. */ + + +#define EPS10 1.e-10 +#define DEG_TO_LINE 5 +#define DEG_TO_STATION 15 +#define LINE_TO_RAD 0.0034906585039886592 +#define STATION_TO_RAD 0.0011635528346628863 +#define PT_O_LINE 80 /* reference point O is at line 80, */ +#define PT_O_STATION 60 /* station 60, */ +#define PT_O_LAMBDA -2.1144663887911301 /* lon -121.15 and */ +#define PT_O_PHI 0.59602993955606354 /* lat 34.15 */ +#define ROTATION_ANGLE 0.52359877559829882 /*CalCOFI angle of 30 deg in rad */ + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + double oy; /* pt O y value in Mercator */ + double l1; /* l1 and l2 are distances calculated using trig that sum + to the east/west distance between point O and point xy */ + double l2; + double ry; /* r is the point on the same station as o (60) and the same + line as xy xy, r, o form a right triangle */ + /* if the user has specified +lon_0 or +k0 for some reason, + we're going to ignore it so that xy is consistent with point O */ + lp.lam = lp.lam + P->lam0; + if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) F_ERROR; + xy.x = lp.lam; + xy.y = -log(pj_tsfn(lp.phi, sin(lp.phi), P->e)); /* Mercator transform xy*/ + oy = -log(pj_tsfn(PT_O_PHI, sin(PT_O_PHI), P->e)); + l1 = (xy.y - oy) * tan(ROTATION_ANGLE); + l2 = -xy.x - l1 + PT_O_LAMBDA; + ry = l2 * cos(ROTATION_ANGLE) * sin(ROTATION_ANGLE) + xy.y; + ry = pj_phi2(P->ctx, exp(-ry), P->e); /*inverse Mercator*/ + xy.x = PT_O_LINE - RAD_TO_DEG * + (ry - PT_O_PHI) * DEG_TO_LINE / cos(ROTATION_ANGLE); + xy.y = PT_O_STATION + RAD_TO_DEG * + (ry - lp.phi) * DEG_TO_STATION / sin(ROTATION_ANGLE); + /* set a = 1, x0 = 0, and y0 = 0 so that no further unit adjustments + are done */ + P->a = 1; + P->x0 = 0; + P->y0 = 0; + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double oy; + double l1; + double l2; + double ry; + lp.lam = lp.lam + P->lam0; + if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) F_ERROR; + xy.x = lp.lam; + xy.y = log(tan(M_FORTPI + .5 * lp.phi)); + oy = log(tan(M_FORTPI + .5 * PT_O_PHI)); + l1 = (xy.y - oy) * tan(ROTATION_ANGLE); + l2 = -xy.x - l1 + PT_O_LAMBDA; + ry = l2 * cos(ROTATION_ANGLE) * sin(ROTATION_ANGLE) + xy.y; + ry = M_HALFPI - 2. * atan(exp(-ry)); + xy.x = PT_O_LINE - RAD_TO_DEG * + (ry - PT_O_PHI) * DEG_TO_LINE / cos(ROTATION_ANGLE); + xy.y = PT_O_STATION + RAD_TO_DEG * + (ry - lp.phi) * DEG_TO_STATION / sin(ROTATION_ANGLE); + P->a = 1; + P->x0 = 0; + P->y0 = 0; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + double ry; /* y value of point r */ + double oymctr; /* Mercator-transformed y value of point O */ + double rymctr; /* Mercator-transformed ry */ + double xymctr; /* Mercator-transformed xy.y */ + double l1; + double l2; + /* turn x and y back into Line/Station */ + xy.x /= P->ra; + xy.y /= P->ra; + ry = PT_O_PHI - LINE_TO_RAD * (xy.x - PT_O_LINE) * + cos(ROTATION_ANGLE); + lp.phi = ry - STATION_TO_RAD * (xy.y - PT_O_STATION) * sin(ROTATION_ANGLE); + oymctr = -log(pj_tsfn(PT_O_PHI, sin(PT_O_PHI), P->e)); + rymctr = -log(pj_tsfn(ry, sin(ry), P->e)); + xymctr = -log(pj_tsfn(lp.phi, sin(lp.phi), P->e)); + l1 = (xymctr - oymctr) * tan(ROTATION_ANGLE); + l2 = (rymctr - xymctr) / (cos(ROTATION_ANGLE) * sin(ROTATION_ANGLE)); + lp.lam = PT_O_LAMBDA - (l1 + l2); + P->over = 1; + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double ry; + double oymctr; + double rymctr; + double xymctr; + double l1; + double l2; + xy.x /= P->ra; + xy.y /= P->ra; + ry = PT_O_PHI - LINE_TO_RAD * (xy.x - PT_O_LINE) * + cos(ROTATION_ANGLE); + lp.phi = ry - STATION_TO_RAD * (xy.y - PT_O_STATION) * sin(ROTATION_ANGLE); + oymctr = log(tan(M_FORTPI + .5 * PT_O_PHI)); + rymctr = log(tan(M_FORTPI + .5 * ry)); + xymctr = log(tan(M_FORTPI + .5 * lp.phi)); + l1 = (xymctr - oymctr) * tan(ROTATION_ANGLE); + l2 = (rymctr - xymctr) / (cos(ROTATION_ANGLE) * sin(ROTATION_ANGLE)); + lp.lam = PT_O_LAMBDA - (l1 + l2); + P->over = 1; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc (P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(calcofi) { + P->opaque = 0; + + if (P->es) { /* ellipsoid */ + P->inv = e_inverse; + P->fwd = e_forward; + } else { /* sphere */ + P->inv = s_inverse; + P->fwd = s_forward; + } + return P; +} + + +#ifndef PJ_SELFTEST +int pj_calcofi_selftest (void) {return 0;} +#else + +int pj_calcofi_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=calcofi +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=calcofi +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {508.44487214981905, -1171.7648604175156}, + {514.99916815188112, -1145.8219814677668}, + {500.68538412539851, -1131.4453779204598}, + {507.36971913666355, -1106.1782014834275}, + }; + + XY s_fwd_expect[] = { + {507.09050748781806, -1164.7273751978314}, + {513.68613637462886, -1138.9992682173072}, + {499.33626147591531, -1124.4351309968195}, + {506.0605703929898, -1099.3756650673038}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {-110.36330792469906, 12.032056975840137}, + {-98.455008863288782, 18.698723642506803}, + {-207.4470245036909, 81.314089278595247}, + {-62.486322854481287, 87.980755945261919}, + }; + + LP s_inv_expect[] = { + {-110.30519040955151, 12.032056975840137}, + {-98.322360950234085, 18.698723642506803}, + {-207.54490681381429, 81.314089278595247}, + {-62.576950371885275, 87.980755945261919}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_cass.c b/proj4/src/PJ_cass.c new file mode 100644 index 000000000000..1eb978e543f7 --- /dev/null +++ b/proj4/src/PJ_cass.c @@ -0,0 +1,178 @@ +#define PJ_LIB__ +# include +PROJ_HEAD(cass, "Cassini") "\n\tCyl, Sph&Ell"; + + +# define EPS10 1e-10 +# define C1 .16666666666666666666 +# define C2 .00833333333333333333 +# define C3 .04166666666666666666 +# define C4 .33333333333333333333 +# define C5 .06666666666666666666 + + +struct pj_opaque { + double *en; + double m0; +}; + + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + double n, t, a1, c, a2, tn; + XY xy = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + + xy.y = pj_mlfn (lp.phi, n = sin (lp.phi), c = cos (lp.phi), Q->en); + + n = 1./sqrt(1. - P->es * n*n); + tn = tan(lp.phi); t = tn * tn; + a1 = lp.lam * c; + c *= P->es * c / (1 - P->es); + a2 = a1 * a1; + + xy.x = n * a1 * (1. - a2 * t * + (C1 - (8. - t + 8. * c) * a2 * C2)); + xy.y -= Q->m0 - n * tn * a2 * + (.5 + (5. - t + 6. * c) * a2 * C3); + + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + xy.x = asin (cos (lp.phi) * sin (lp.lam)); + xy.y = atan2 (tan (lp.phi), cos (lp.lam)) - P->phi0; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + double n, t, r, dd, d2, tn, ph1; + LP lp = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + + ph1 = pj_inv_mlfn (P->ctx, Q->m0 + xy.y, P->es, Q->en); + tn = tan (ph1); t = tn*tn; + n = sin (ph1); + r = 1. / (1. - P->es * n * n); + n = sqrt (r); + r *= (1. - P->es) * n; + dd = xy.x / n; + d2 = dd * dd; + lp.phi = ph1 - (n * tn / r) * d2 * + (.5 - (1. + 3. * t) * d2 * C3); + lp.lam = dd * (1. + t * d2 * + (-C4 + (1. + 3. * t) * d2 * C5)) / cos (ph1); + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double dd; + lp.phi = asin(sin(dd = xy.y + P->phi0) * cos(xy.x)); + lp.lam = atan2(tan(xy.x), cos(dd)); + return lp; +} + + +static void *freeup_new(PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc(P->opaque->en); + pj_dealloc(P->opaque); + return pj_dealloc(P); +} + +static void freeup(PJ *P) { /* Destructor */ + freeup_new (P); + return; +} + +PJ *PROJECTION(cass) { + + /* Spheroidal? */ + if (0==P->es) { + P->inv = s_inverse; + P->fwd = s_forward; + return P; + } + + /* otherwise it's ellipsoidal */ + P->opaque = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==P->opaque) + return freeup_new (P); + + P->opaque->en = pj_enfn (P->es); + if (0==P->opaque->en) + return freeup_new (P); + + P->opaque->m0 = pj_mlfn (P->phi0, sin (P->phi0), cos (P->phi0), P->opaque->en); + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_cass_selftest (void) {return 0;} +#else + +int pj_cass_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=cass +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=cass +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222605.28577699114, 110642.22925399939}, + { 222605.28577699114, -110642.22925399939}, + {-222605.28577699114, 110642.22925399939}, + {-222605.28577699114, -110642.22925399939}, + }; + + XY s_fwd_expect[] = { + { 223368.10520348375, 111769.14504058579}, + { 223368.10520348375, -111769.14504058579}, + {-223368.10520348375, 111769.14504058579}, + {-223368.10520348375, -111769.14504058579}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305684613522, 0.00090436947663183841}, + { 0.0017966305684613522, -0.00090436947663183841}, + {-0.0017966305684613522, 0.00090436947663183841}, + {-0.0017966305684613522, -0.00090436947663183841}, + }; + + LP s_inv_expect[] = { + { 0.0017904931100023887, 0.00089524655445477922}, + { 0.0017904931100023887, -0.00089524655445477922}, + {-0.0017904931100023887, 0.00089524655445477922}, + {-0.0017904931100023887, -0.00089524655445477922}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif diff --git a/proj4/src/PJ_cc.c b/proj4/src/PJ_cc.c new file mode 100644 index 000000000000..1b5d31522d2b --- /dev/null +++ b/proj4/src/PJ_cc.c @@ -0,0 +1,89 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph"; +#define EPS10 1.e-10 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + if (fabs (fabs(lp.phi) - M_HALFPI) <= EPS10) F_ERROR; + xy.x = lp.lam; + xy.y = tan(lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + lp.phi = atan(xy.y); + lp.lam = xy.x; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(cc) { + P->es = 0.; + + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_cc_selftest (void) {return 0;} +#else + +int pj_cc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=cc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223402.14425527418, 111712.41554059254}, + {223402.14425527418, -111712.41554059254}, + {-223402.14425527418, 111712.41554059254}, + {-223402.14425527418, -111712.41554059254}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.0017904931097838226, 0.00089524655481905597}, + {0.0017904931097838226, -0.00089524655481905597}, + {-0.0017904931097838226, 0.00089524655481905597}, + {-0.0017904931097838226, -0.00089524655481905597}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_cea.c b/proj4/src/PJ_cea.c new file mode 100644 index 000000000000..723611cf3b87 --- /dev/null +++ b/proj4/src/PJ_cea.c @@ -0,0 +1,155 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double qp; + double *apa; +}; + +PROJ_HEAD(cea, "Equal Area Cylindrical") "\n\tCyl, Sph&Ell\n\tlat_ts="; +# define EPS 1e-10 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + xy.x = P->k0 * lp.lam; + xy.y = 0.5 * pj_qsfn (sin (lp.phi), P->e, P->one_es) / P->k0; + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + xy.x = P->k0 * lp.lam; + xy.y = sin(lp.phi) / P->k0; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + lp.phi = pj_authlat(asin( 2. * xy.y * P->k0 / P->opaque->qp), P->opaque->apa); + lp.lam = xy.x / P->k0; + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double t; + + if ((t = fabs(xy.y *= P->k0)) - EPS <= 1.) { + if (t >= 1.) + lp.phi = xy.y < 0. ? -M_HALFPI : M_HALFPI; + else + lp.phi = asin(xy.y); + lp.lam = xy.x / P->k0; + } else I_ERROR; + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque->apa); + pj_dealloc (P->opaque); + return pj_dealloc (P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +PJ *PROJECTION(cea) { + double t = 0.0; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + if (pj_param(P->ctx, P->params, "tlat_ts").i) { + P->k0 = cos(t = pj_param(P->ctx, P->params, "rlat_ts").f); + if (P->k0 < 0.) { + E_ERROR(-24); + } + } + if (P->es) { + t = sin(t); + P->k0 /= sqrt(1. - P->es * t * t); + P->e = sqrt(P->es); + if (!(Q->apa = pj_authset(P->es))) E_ERROR_0; + Q->qp = pj_qsfn(1., P->e, P->one_es); + P->inv = e_inverse; + P->fwd = e_forward; + } else { + P->inv = s_inverse; + P->fwd = s_forward; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_cea_selftest (void) {return 0;} +#else + +int pj_cea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=cea +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=cea +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222638.981586547132, 110568.812396267356}, + { 222638.981586547132, -110568.812396265886}, + {-222638.981586547132, 110568.812396267356}, + {-222638.981586547132, -110568.812396265886}, + }; + + XY s_fwd_expect[] = { + { 223402.144255274179, 111695.401198614476}, + { 223402.144255274179, -111695.401198614476}, + {-223402.144255274179, 111695.401198614476}, + {-223402.144255274179, -111695.401198614476}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179663056823904264, 0.000904369476105564289}, + { 0.00179663056823904264, -0.000904369476105564289}, + {-0.00179663056823904264, 0.000904369476105564289}, + {-0.00179663056823904264, -0.000904369476105564289}, + }; + + LP s_inv_expect[] = { + { 0.00179049310978382265, 0.000895246554928338998}, + { 0.00179049310978382265, -0.000895246554928338998}, + {-0.00179049310978382265, 0.000895246554928338998}, + {-0.00179049310978382265, -0.000895246554928338998}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + +#endif diff --git a/proj4/src/PJ_chamb.c b/proj4/src/PJ_chamb.c new file mode 100644 index 000000000000..6bacbbe97d46 --- /dev/null +++ b/proj4/src/PJ_chamb.c @@ -0,0 +1,179 @@ +#define PJ_LIB__ +#include + +typedef struct { double r, Az; } VECT; +struct pj_opaque { + struct { /* control point data */ + double phi, lam; + double cosphi, sinphi; + VECT v; + XY p; + double Az; + } c[3]; + XY p; + double beta_0, beta_1, beta_2; +}; + +PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv." +"\n\tlat_1= lon_1= lat_2= lon_2= lat_3= lon_3="; + +#include +#define THIRD 0.333333333333333333 +#define TOL 1e-9 + +/* distance and azimuth from point 1 to point 2 */ +static VECT 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(ctx, s1 * s2 + c1 * c2 * cdl); + else { /* more accurate for smaller distances */ + dp = sin(.5 * dphi); + dl = sin(.5 * dlam); + 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); + else + v.r = v.Az = 0.; + return v; +} + +/* law of cosines */ +static double lc(projCtx ctx, double b,double c,double a) { + return aacos(ctx, .5 * (b * b + c * c - a * a) / (b * c)); +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double sinphi, cosphi, a; + VECT v[3]; + int i, j; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + for (i = 0; i < 3; ++i) { /* dist/azimiths from control */ + v[i] = vect(P->ctx, lp.phi - Q->c[i].phi, Q->c[i].cosphi, Q->c[i].sinphi, + cosphi, sinphi, lp.lam - Q->c[i].lam); + if ( ! v[i].r) + break; + v[i].Az = adjlon(v[i].Az - Q->c[i].v.Az); + } + if (i < 3) /* current point at control point */ + xy = Q->c[i].p; + else { /* point mean of intersepts */ + xy = Q->p; + for (i = 0; i < 3; ++i) { + j = i == 2 ? 0 : i + 1; + a = lc(P->ctx,Q->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 */ + xy.x += v[i].r * cos(a); + xy.y -= v[i].r * sin(a); + } else if (i == 1) { + a = Q->beta_1 - a; + xy.x -= v[i].r * cos(a); + xy.y -= v[i].r * sin(a); + } else { + a = Q->beta_2 - a; + xy.x += v[i].r * cos(a); + xy.y += v[i].r * sin(a); + } + } + xy.x *= THIRD; /* mean of arc intercepts */ + xy.y *= THIRD; + } + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(chamb) { + int i, j; + char line[10]; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + for (i = 0; i < 3; ++i) { /* get control point locations */ + (void)sprintf(line, "rlat_%d", i+1); + Q->c[i].phi = pj_param(P->ctx, P->params, line).f; + (void)sprintf(line, "rlon_%d", i+1); + Q->c[i].lam = pj_param(P->ctx, P->params, line).f; + Q->c[i].lam = adjlon(Q->c[i].lam - P->lam0); + Q->c[i].cosphi = cos(Q->c[i].phi); + Q->c[i].sinphi = sin(Q->c[i].phi); + } + for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */ + j = i == 2 ? 0 : i + 1; + Q->c[i].v = vect(P->ctx,Q->c[j].phi - Q->c[i].phi, Q->c[i].cosphi, Q->c[i].sinphi, + Q->c[j].cosphi, Q->c[j].sinphi, Q->c[j].lam - Q->c[i].lam); + if (! Q->c[i].v.r) E_ERROR(-25); + /* co-linearity problem ignored for now */ + } + Q->beta_0 = lc(P->ctx,Q->c[0].v.r, Q->c[2].v.r, Q->c[1].v.r); + Q->beta_1 = lc(P->ctx,Q->c[0].v.r, Q->c[1].v.r, Q->c[2].v.r); + Q->beta_2 = M_PI - Q->beta_0; + Q->p.y = 2. * (Q->c[0].p.y = Q->c[1].p.y = Q->c[2].v.r * sin(Q->beta_0)); + Q->c[2].p.y = 0.; + Q->c[0].p.x = - (Q->c[1].p.x = 0.5 * Q->c[0].v.r); + Q->p.x = Q->c[2].p.x = Q->c[0].p.x + Q->c[2].v.r * cos(Q->beta_0); + + P->es = 0.; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_chamb_selftest (void) {return 0;} +#else + +int pj_chamb_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=chamb +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {-27864.7795868005815, -223364.324593274243}, + {-251312.283053493476, -223402.145526208304}, + {-27864.7856491046077, 223364.327328827145}, + {-251312.289116443484, 223402.142197287147}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_collg.c b/proj4/src/PJ_collg.c new file mode 100644 index 000000000000..baac1af92ec0 --- /dev/null +++ b/proj4/src/PJ_collg.c @@ -0,0 +1,98 @@ +#define PJ_LIB__ +# include + +PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph."; +#define FXC 1.12837916709551257390 +#define FYC 1.77245385090551602729 +#define ONEEPS 1.0000001 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + if ((xy.y = 1. - sin(lp.phi)) <= 0.) + xy.y = 0.; + else + xy.y = sqrt(xy.y); + xy.x = FXC * lp.lam * xy.y; + xy.y = FYC * (1. - xy.y); + return (xy); +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + lp.phi = xy.y / FYC - 1.; + if (fabs(lp.phi = 1. - lp.phi * lp.phi) < 1.) + lp.phi = asin(lp.phi); + else if (fabs(lp.phi) > ONEEPS) I_ERROR + else lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + if ((lp.lam = 1. - sin(lp.phi)) <= 0.) + lp.lam = 0.; + else + lp.lam = xy.x / (FXC * sqrt(lp.lam)); + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(collg) { + P->es = 0.0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_collg_selftest (void) {return 0;} +#else + +int pj_collg_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=collg +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {249872.921577929839, 99423.1747884602082}, + {254272.532301245432, -98559.3077607425657}, + {-249872.921577929839, 99423.1747884602082}, + {-254272.532301245432, -98559.3077607425657}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.00158679719207879865, 0.00101017310941749921}, + {0.001586769215623956, -0.00101018201458258111}, + {-0.00158679719207879865, 0.00101017310941749921}, + {-0.001586769215623956, -0.00101018201458258111}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_comill.c b/proj4/src/PJ_comill.c new file mode 100644 index 000000000000..c492dc95288f --- /dev/null +++ b/proj4/src/PJ_comill.c @@ -0,0 +1,131 @@ +/* +The Compact Miller projection was designed by Tom Patterson, US National +Park Service, in 2014. The polynomial equation was developed by Bojan +Savric and Bernhard Jenny, College of Earth, Ocean, and Atmospheric +Sciences, Oregon State University. +Port to PROJ.4 by Bojan Savric, 4 April 2016 +*/ + +#define PJ_LIB__ +#include + +PROJ_HEAD(comill, "Compact Miller") "\n\tCyl., Sph."; + +#define K1 0.9902 +#define K2 0.1604 +#define K3 -0.03054 +#define C1 K1 +#define C2 (3 * K2) +#define C3 (5 * K3) +#define EPS 1e-11 +#define MAX_Y (0.6000207669862655 * M_PI) + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double lat_sq; + + (void) P; /* silence unused parameter warnings */ + + lat_sq = lp.phi * lp.phi; + xy.x = lp.lam; + xy.y = lp.phi * (K1 + lat_sq * (K2 + K3 * lat_sq)); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double yc, tol, y2, f, fder; + + (void) P; /* silence unused parameter warnings */ + + /* 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; + f = (yc * (K1 + y2 * (K2 + K3 * y2))) - xy.y; + fder = C1 + y2 * (C2 + C3 * y2); + yc -= tol = f / fder; + if (fabs(tol) < EPS) { + break; + } + } + lp.phi = yc; + + /* longitude */ + lp.lam = xy.x; + + return lp; +} + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(comill) { + P->es = 0; + + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_comill_selftest (void) {return 0;} +#else + +int pj_comill_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=comill +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223402.144255274179, 110611.859089458536}, + {223402.144255274179, -110611.859089458536}, + {-223402.144255274179, 110611.859089458536}, + {-223402.144255274179, -110611.859089458536}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.00179049310978382265, 0.000904106801510605831}, + {0.00179049310978382265, -0.000904106801510605831}, + {-0.00179049310978382265, 0.000904106801510605831}, + {-0.00179049310978382265, -0.000904106801510605831}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_crast.c b/proj4/src/PJ_crast.c new file mode 100644 index 000000000000..09c4f1e478d2 --- /dev/null +++ b/proj4/src/PJ_crast.c @@ -0,0 +1,94 @@ +#define PJ_LIB__ +# include + +PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") "\n\tPCyl., Sph."; + +#define XM 0.97720502380583984317 +#define RXM 1.02332670794648848847 +#define YM 3.06998012383946546542 +#define RYM 0.32573500793527994772 +#define THIRD 0.333333333333333333 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + lp.phi *= THIRD; + xy.x = XM * lp.lam * (2. * cos(lp.phi + lp.phi) - 1.); + xy.y = YM * sin(lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + lp.phi = 3. * asin(xy.y * RYM); + lp.lam = xy.x * RXM / (2. * cos((lp.phi + lp.phi) * THIRD) - 1); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(crast) { + P->es = 0.0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_crast_selftest (void) {return 0;} +#else + +int pj_crast_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=crast +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + + XY s_fwd_expect[] = { + {218280.142056780722, 114306.045604279774}, + {218280.142056780722, -114306.045604279774}, + {-218280.142056780722, 114306.045604279774}, + {-218280.142056780722, -114306.045604279774}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.00183225941982580187, 0.00087483943098902331}, + {0.00183225941982580187, -0.00087483943098902331}, + {-0.00183225941982580187, 0.00087483943098902331}, + {-0.00183225941982580187, -0.00087483943098902331}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_denoy.c b/proj4/src/PJ_denoy.c new file mode 100644 index 000000000000..9eb818b9b8ee --- /dev/null +++ b/proj4/src/PJ_denoy.c @@ -0,0 +1,69 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph."; + +#define C0 0.95 +#define C1 -0.08333333333333333333 +#define C3 0.00166666666666666666 +#define D1 0.9 +#define D5 0.03 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + (void) P; + xy.y = lp.phi; + xy.x = lp.lam; + lp.lam = fabs(lp.lam); + xy.x *= cos((C0 + lp.lam * (C1 + lp.lam * lp.lam * C3)) * + (lp.phi * (D1 + D5 * lp.phi * lp.phi * lp.phi * lp.phi))); + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(denoy) { + P->es = 0.0; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_denoy_selftest (void) {return 0;} +#else + +int pj_denoy_selftest (void) { + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=denoy +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223377.422876954137, 111701.07212763709}, + { 223377.422876954137, -111701.07212763709}, + {-223377.422876954137, 111701.07212763709}, + {-223377.422876954137, -111701.07212763709}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, 0, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_eck1.c b/proj4/src/PJ_eck1.c new file mode 100644 index 000000000000..da1590174693 --- /dev/null +++ b/proj4/src/PJ_eck1.c @@ -0,0 +1,92 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl., Sph."; +#define FC 0.92131773192356127802 +#define RP 0.31830988618379067154 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = FC * lp.lam * (1. - RP * fabs(lp.phi)); + xy.y = FC * lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + + lp.phi = xy.y / FC; + lp.lam = xy.x / (FC * (1. - RP * fabs(lp.phi))); + + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(eck1) { + P->es = 0.0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P ; +} + + +#ifndef PJ_SELFTEST +int pj_eck1_selftest (void) {return 0;} +#else + +int pj_eck1_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eck1 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + XY s_fwd_expect[] = { + { 204680.88820295094, 102912.17842606473}, + { 204680.88820295094, -102912.17842606473}, + {-204680.88820295094, 102912.17842606473}, + {-204680.88820295094, -102912.17842606473}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0019434150820034624, 0.00097170229538813102}, + { 0.0019434150820034624, -0.00097170229538813102}, + {-0.0019434150820034624, 0.00097170229538813102}, + {-0.0019434150820034624, -0.00097170229538813102}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_eck2.c b/proj4/src/PJ_eck2.c new file mode 100644 index 000000000000..763039a9e2d0 --- /dev/null +++ b/proj4/src/PJ_eck2.c @@ -0,0 +1,104 @@ +#define PJ_LIB__ +# include + +PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl. Sph."; + +#define FXC 0.46065886596178063902 +#define FYC 1.44720250911653531871 +#define C13 0.33333333333333333333 +#define ONEEPS 1.0000001 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = FXC * lp.lam * (xy.y = sqrt(4. - 3. * sin(fabs(lp.phi)))); + xy.y = FYC * (2. - xy.y); + if ( lp.phi < 0.) xy.y = -xy.y; + + return (xy); +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + + lp.lam = xy.x / (FXC * ( lp.phi = 2. - fabs(xy.y) / FYC) ); + lp.phi = (4. - lp.phi * lp.phi) * C13; + if (fabs(lp.phi) >= 1.) { + if (fabs(lp.phi) > ONEEPS) I_ERROR + else + lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + } else + lp.phi = asin(lp.phi); + if (xy.y < 0) + lp.phi = -lp.phi; + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc (P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(eck2) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_eck2_selftest (void) {return 0;} +#else + +int pj_eck2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eck2 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 204472.87090796008, 121633.73497524235}, + { 204472.87090796008, -121633.73497524235}, + {-204472.87090796008, 121633.73497524235}, + {-204472.87090796008, -121633.73497524235}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0019434150820034624, 0.00082480429919795412}, + { 0.0019434150820034624, -0.00082480429919795412}, + {-0.0019434150820034624, 0.00082480429919795412}, + {-0.0019434150820034624, -0.00082480429919795412}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_eck3.c b/proj4/src/PJ_eck3.c new file mode 100644 index 000000000000..d70838d280af --- /dev/null +++ b/proj4/src/PJ_eck3.c @@ -0,0 +1,295 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph."; +PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph."; +PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph."; +PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph."; + +struct pj_opaque { + double C_x, C_y, A, B; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + xy.y = Q->C_y * lp.phi; + xy.x = Q->C_x * lp.lam * (Q->A + asqrt(1. - Q->B * lp.phi * lp.phi)); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + lp.phi = xy.y / Q->C_y; + lp.lam = xy.x / (Q->C_x * (Q->A + asqrt(1. - Q->B * lp.phi * lp.phi))); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ *setup(PJ *P) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + return P; +} + + +PJ *PROJECTION(eck3) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = 0.42223820031577120149; + Q->C_y = 0.84447640063154240298; + Q->A = 1.0; + Q->B = 0.4052847345693510857755; + + return setup(P); +} + + +PJ *PROJECTION(kav7) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + /* Defined twice in original code - Using 0.866..., + * but leaving the other one here as a safety measure. + * Q->C_x = 0.2632401569273184856851; */ + Q->C_x = 0.8660254037844; + Q->C_y = 1.; + Q->A = 0.; + Q->B = 0.30396355092701331433; + + return setup(P); +} + + +PJ *PROJECTION(wag6) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = Q->C_y = 0.94745; + Q->A = 0.0; + Q->B = 0.30396355092701331433; + + return setup(P); +} + + +PJ *PROJECTION(putp1) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = 1.89490; + Q->C_y = 0.94745; + Q->A = -0.5; + Q->B = 0.30396355092701331433; + + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_eck3_selftest (void) {return 0;} +#else + +int pj_eck3_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eck3 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 188652.01572153764, 94328.919337031271}, + { 188652.01572153764, -94328.919337031271}, + {-188652.01572153764, 94328.919337031271}, + {-188652.01572153764, -94328.919337031271}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0021202405520236059, 0.0010601202759750307}, + { 0.0021202405520236059, -0.0010601202759750307}, + {-0.0021202405520236059, 0.0010601202759750307}, + {-0.0021202405520236059, -0.0010601202759750307}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + +#ifndef PJ_SELFTEST +int pj_kav7_selftest (void) {return 0;} +#else + +int pj_kav7_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=kav7 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 193462.9749437288, 111701.07212763709}, + { 193462.9749437288, -111701.07212763709}, + {-193462.9749437288, 111701.07212763709}, + {-193462.9749437288, -111701.07212763709} + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0020674833579085268, 0.00089524655489191132}, + { 0.0020674833579085268, -0.00089524655489191132}, + {-0.0020674833579085268, 0.00089524655489191132}, + {-0.0020674833579085268, -0.00089524655489191132} + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + +#ifndef PJ_SELFTEST +int pj_wag6_selftest (void) {return 0;} +#else + +int pj_wag6_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag6 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 211652.56216440981, 105831.18078732977}, + { 211652.56216440981, -105831.18078732977}, + {-211652.56216440981, 105831.18078732977}, + {-211652.56216440981, -105831.18078732977} + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0018898022163257513, 0.000944901108123818}, + { 0.0018898022163257513, -0.000944901108123818}, + {-0.0018898022163257513, 0.000944901108123818}, + {-0.0018898022163257513, -0.000944901108123818} + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + + +#ifndef PJ_SELFTEST +int pj_putp1_selftest (void) {return 0;} +#else + +int pj_putp1_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp1 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 211642.76275416015, 105831.18078732977}, + { 211642.76275416015, -105831.18078732977}, + {-211642.76275416015, 105831.18078732977}, + {-211642.76275416015, -105831.18078732977} + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0018898022164038663, 0.000944901108123818}, + { 0.0018898022164038663, -0.000944901108123818}, + {-0.0018898022164038663, 0.000944901108123818}, + {-0.0018898022164038663, -0.000944901108123818} + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_eck4.c b/proj4/src/PJ_eck4.c new file mode 100644 index 000000000000..358c0224bcd5 --- /dev/null +++ b/proj4/src/PJ_eck4.c @@ -0,0 +1,117 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph."; + +#define C_x .42223820031577120149 +#define C_y 1.32650042817700232218 +#define RC_y .75386330736002178205 +#define C_p 3.57079632679489661922 +#define RC_p .28004957675577868795 +#define EPS 1e-7 +#define NITER 6 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double p, V, s, c; + int i; + (void) P; + + p = C_p * sin(lp.phi); + V = lp.phi * lp.phi; + lp.phi *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 ); + for (i = NITER; i ; --i) { + c = cos(lp.phi); + s = sin(lp.phi); + lp.phi -= V = (lp.phi + s * (c + 2.) - p) / + (1. + c * (c + 2.) - s * s); + if (fabs(V) < EPS) + break; + } + if (!i) { + xy.x = C_x * lp.lam; + xy.y = lp.phi < 0. ? -C_y : C_y; + } else { + xy.x = C_x * lp.lam * (1. + cos(lp.phi)); + xy.y = C_y * sin(lp.phi); + } + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double c; + + lp.phi = aasin(P->ctx,xy.y / C_y); + lp.lam = xy.x / (C_x * (1. + (c = cos(lp.phi)))); + lp.phi = aasin(P->ctx,(lp.phi + sin(lp.phi) * (c + 2.)) / C_p); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(eck4) { + P->es = 0.0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_eck4_selftest (void) {return 0;} +#else + +int pj_eck4_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eck4 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 188646.38935641639, 132268.54017406539}, + { 188646.38935641639, -132268.54017406539}, + {-188646.38935641639, 132268.54017406539}, + {-188646.38935641639, -132268.54017406539}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0021202405520236059, 0.00075601458836610643}, + { 0.0021202405520236059, -0.00075601458836610643}, + {-0.0021202405520236059, 0.00075601458836610643}, + {-0.0021202405520236059, -0.00075601458836610643}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_eck5.c b/proj4/src/PJ_eck5.c new file mode 100644 index 000000000000..5fbdf7db7376 --- /dev/null +++ b/proj4/src/PJ_eck5.c @@ -0,0 +1,93 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph."; + +#define XF 0.44101277172455148219 +#define RXF 2.26750802723822639137 +#define YF 0.88202554344910296438 +#define RYF 1.13375401361911319568 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + xy.x = XF * (1. + cos(lp.phi)) * lp.lam; + xy.y = YF * lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + lp.lam = RXF * xy.x / (1. + cos( lp.phi = RYF * xy.y)); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(eck5) { + P->es = 0.0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_eck5_selftest (void) {return 0;} +#else + +int pj_eck5_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eck5 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 197031.39213406085, 98523.198847226551}, + { 197031.39213406085, -98523.198847226551}, + {-197031.39213406085, 98523.198847226551}, + {-197031.39213406085, -98523.198847226551}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.002029978749734037, 0.001014989374787388}, + {0.002029978749734037, -0.001014989374787388}, + {-0.002029978749734037, 0.001014989374787388}, + {-0.002029978749734037, -0.001014989374787388}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_eqc.c b/proj4/src/PJ_eqc.c new file mode 100644 index 000000000000..6f0cfcf1395c --- /dev/null +++ b/proj4/src/PJ_eqc.c @@ -0,0 +1,108 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double rc; +}; + +PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") + "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]"; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + xy.x = Q->rc * lp.lam; + xy.y = lp.phi - P->phi0; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + lp.lam = xy.x / Q->rc; + lp.phi = xy.y + P->phi0; + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(eqc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if ((Q->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.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_eqc_selftest (void) {return 0;} +#else + +int pj_eqc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eqc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223402.144255274179, 111701.07212763709}, + { 223402.144255274179, -111701.07212763709}, + {-223402.144255274179, 111701.07212763709}, + {-223402.144255274179, -111701.07212763709}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179049310978382265, 0.000895246554891911323}, + { 0.00179049310978382265, -0.000895246554891911323}, + {-0.00179049310978382265, 0.000895246554891911323}, + {-0.00179049310978382265, -0.000895246554891911323}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_eqdc.c b/proj4/src/PJ_eqdc.c new file mode 100644 index 000000000000..1fc4cef73f87 --- /dev/null +++ b/proj4/src/PJ_eqdc.c @@ -0,0 +1,190 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double phi1; + double phi2; + double n; + double rho; + double rho0; + double c; + double *en; + int ellips; +}; + +PROJ_HEAD(eqdc, "Equidistant Conic") + "\n\tConic, Sph&Ell\n\tlat_1= lat_2="; +# define EPS10 1.e-10 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + Q->rho = Q->c - (Q->ellips ? pj_mlfn(lp.phi, sin(lp.phi), + cos(lp.phi), Q->en) : lp.phi); + xy.x = Q->rho * sin( lp.lam *= Q->n ); + xy.y = Q->rho0 - Q->rho * cos(lp.lam); + + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + if ((Q->rho = hypot(xy.x, xy.y = Q->rho0 - xy.y)) != 0.0 ) { + if (Q->n < 0.) { + Q->rho = -Q->rho; + xy.x = -xy.x; + xy.y = -xy.y; + } + lp.phi = Q->c - Q->rho; + if (Q->ellips) + lp.phi = pj_inv_mlfn(P->ctx, lp.phi, P->es, Q->en); + lp.lam = atan2(xy.x, xy.y) / Q->n; + } else { + lp.lam = 0.; + lp.phi = Q->n > 0. ? M_HALFPI : -M_HALFPI; + } + return lp; +} + + +static void special(LP lp, PJ *P, struct FACTORS *fac) { + struct pj_opaque *Q = P->opaque; + double sinphi, cosphi; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + fac->code |= IS_ANAL_HK; + fac->h = 1.; + fac->k = Q->n * (Q->c - (Q->ellips ? pj_mlfn(lp.phi, sinphi, + cosphi, Q->en) : lp.phi)) / pj_msfn(sinphi, cosphi, P->es); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + if (P->opaque->en) + pj_dealloc (P->opaque->en); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(eqdc) { + double cosphi, sinphi; + int secant; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; + if (fabs(Q->phi1 + Q->phi2) < EPS10) E_ERROR(-21); + if (!(Q->en = pj_enfn(P->es))) + E_ERROR_0; + Q->n = sinphi = sin(Q->phi1); + cosphi = cos(Q->phi1); + secant = fabs(Q->phi1 - Q->phi2) >= EPS10; + if( (Q->ellips = (P->es > 0.)) ) { + double ml1, m1; + + m1 = pj_msfn(sinphi, cosphi, P->es); + ml1 = pj_mlfn(Q->phi1, sinphi, cosphi, Q->en); + if (secant) { /* secant cone */ + sinphi = sin(Q->phi2); + cosphi = cos(Q->phi2); + Q->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / + (pj_mlfn(Q->phi2, sinphi, cosphi, Q->en) - ml1); + } + Q->c = ml1 + m1 / Q->n; + Q->rho0 = Q->c - pj_mlfn(P->phi0, sin(P->phi0), + cos(P->phi0), Q->en); + } else { + if (secant) + Q->n = (cosphi - cos(Q->phi2)) / (Q->phi2 - Q->phi1); + Q->c = Q->phi1 + cos(Q->phi1) / Q->n; + Q->rho0 = Q->c - P->phi0; + } + P->inv = e_inverse; + P->fwd = e_forward; + P->spc = special; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_eqdc_selftest (void) {return 0;} +#else + +int pj_eqdc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=eqdc +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=eqdc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222588.440269285755, 110659.134907347048}, + { 222756.836702042434, -110489.578087220681}, + {-222588.440269285755, 110659.134907347048}, + {-222756.836702042434, -110489.578087220681}, + }; + + XY s_fwd_expect[] = { + { 223351.088175113517, 111786.108747173785}, + { 223521.200266735133, -111615.970741240744}, + {-223351.088175113517, 111786.108747173785}, + {-223521.200266735133, -111615.970741240744}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179635944879094839, 0.000904368858588402644}, + { 0.00179635822020772734, -0.000904370095529954975}, + {-0.00179635944879094839, 0.000904368858588402644}, + {-0.00179635822020772734, -0.000904370095529954975}, + }; + + LP s_inv_expect[] = { + { 0.0017902210900486641, 0.000895245944814909169}, + { 0.00179021986984890255, -0.000895247165333684842}, + {-0.0017902210900486641, 0.000895245944814909169}, + {-0.00179021986984890255, -0.000895247165333684842}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_fahey.c b/proj4/src/PJ_fahey.c new file mode 100644 index 000000000000..4f4b92a4f416 --- /dev/null +++ b/proj4/src/PJ_fahey.c @@ -0,0 +1,95 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph."; + +#define TOL 1e-6 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = tan(0.5 * lp.phi); + xy.y = 1.819152 * xy.x; + xy.x = 0.819152 * lp.lam * asqrt(1 - xy.x * xy.x); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + + xy.y /= 1.819152; + lp.phi = 2. * atan(xy.y); + xy.y = 1. - xy.y * xy.y; + lp.lam = fabs(xy.y) < TOL ? 0. : xy.x / (0.819152 * sqrt(xy.y)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(fahey) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_fahey_selftest (void) {return 0;} +#else + +int pj_fahey_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=fahey +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 182993.34464912376, 101603.19356988439}, + { 182993.34464912376, -101603.19356988439}, + {-182993.34464912376, 101603.19356988439}, + {-182993.34464912376, -101603.19356988439}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.0021857886080359551, 0.00098424601668238403}, + {0.0021857886080359551, -0.00098424601668238403}, + {-0.0021857886080359551, 0.00098424601668238403}, + {-0.0021857886080359551, -0.00098424601668238403}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_fouc_s.c b/proj4/src/PJ_fouc_s.c new file mode 100644 index 000000000000..4392a6ec6e4a --- /dev/null +++ b/proj4/src/PJ_fouc_s.c @@ -0,0 +1,126 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl., Sph."; + +#define MAX_ITER 10 +#define LOOP_TOL 1e-7 + +struct pj_opaque { + double n, n1; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double t; + + t = cos(lp.phi); + xy.x = lp.lam * t / (Q->n + Q->n1 * t); + xy.y = Q->n * lp.phi + Q->n1 * sin(lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double V; + int i; + + if (Q->n) { + lp.phi = xy.y; + for (i = MAX_ITER; i ; --i) { + lp.phi -= V = (Q->n * lp.phi + Q->n1 * sin(lp.phi) - xy.y ) / + (Q->n + Q->n1 * cos(lp.phi)); + if (fabs(V) < LOOP_TOL) + break; + } + if (!i) + lp.phi = xy.y < 0. ? -M_HALFPI : M_HALFPI; + } else + lp.phi = aasin(P->ctx,xy.y); + V = cos(lp.phi); + lp.lam = xy.x * (Q->n + Q->n1 * V) / V; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(fouc_s) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = pj_param(P->ctx, P->params, "dn").f; + if (Q->n < 0. || Q->n > 1.) + E_ERROR(-99) + Q->n1 = 1. - Q->n; + P->es = 0; + P->inv = s_inverse; + P->fwd = s_forward; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_fouc_s_selftest (void) {return 0;} +#else + +int pj_fouc_s_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=fouc_s +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223402.14425527424, 111695.40119861449}, + { 223402.14425527424, -111695.40119861449}, + {-223402.14425527424, 111695.40119861449}, + {-223402.14425527424, -111695.40119861449}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931097838226, 0.000895246554928339}, + { 0.0017904931097838226, -0.000895246554928339}, + {-0.0017904931097838226, 0.000895246554928339}, + {-0.0017904931097838226, -0.000895246554928339}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_gall.c b/proj4/src/PJ_gall.c new file mode 100644 index 000000000000..bca36bc7f24f --- /dev/null +++ b/proj4/src/PJ_gall.c @@ -0,0 +1,100 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(gall, "Gall (Gall Stereographic)") "\n\tCyl, Sph"; + +#define YF 1.70710678118654752440 +#define XF 0.70710678118654752440 +#define RYF 0.58578643762690495119 +#define RXF 1.41421356237309504880 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = XF * lp.lam; + xy.y = YF * tan(.5 * lp.phi); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + + lp.lam = RXF * xy.x; + lp.phi = 2. * atan(xy.y * RYF); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(gall) { + P->es = 0.0; + + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_gall_selftest (void) {return 0;} +#else + +int pj_gall_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=gall +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 157969.17113451968, 95345.249178385886}, + { 157969.17113451968, -95345.249178385886}, + {-157969.17113451968, 95345.249178385886}, + {-157969.17113451968, -95345.249178385886}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0025321396391918614, 0.001048846580346495}, + { 0.0025321396391918614, -0.001048846580346495}, + {-0.0025321396391918614, 0.001048846580346495}, + {-0.0025321396391918614, -0.001048846580346495}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_geos.c b/proj4/src/PJ_geos.c new file mode 100644 index 000000000000..283063ba7823 --- /dev/null +++ b/proj4/src/PJ_geos.c @@ -0,0 +1,299 @@ +/* +** libproj -- library of cartographic projections +** +** Copyright (c) 2004 Gerald I. Evenden +** Copyright (c) 2012 Martin Raspaud +** +** See also (section 4.4.3.2): +** http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf +** +** 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 + +struct pj_opaque { + double h; + double radius_p; + double radius_p2; + double radius_p_inv2; + double radius_g; + double radius_g_1; + double C; + char *sweep_axis; + int flip_axis; +}; + +PROJ_HEAD(geos, "Geostationary Satellite View") "\n\tAzi, Sph&Ell\n\th="; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double Vx, Vy, Vz, tmp; + + /* Calculation of the three components of the vector from satellite to + ** position on earth surface (lon,lat).*/ + tmp = cos(lp.phi); + Vx = cos (lp.lam) * tmp; + Vy = sin (lp.lam) * tmp; + Vz = sin (lp.phi); + + /* Check visibility*/ + + + /* Calculation based on view angles from satellite.*/ + tmp = Q->radius_g - Vx; + + if(Q->flip_axis) { + xy.x = Q->radius_g_1 * atan(Vy / hypot(Vz, tmp)); + xy.y = Q->radius_g_1 * atan(Vz / tmp); + } else { + xy.x = Q->radius_g_1 * atan(Vy / tmp); + xy.y = Q->radius_g_1 * atan(Vz / hypot(Vy, tmp)); + } + + return xy; +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double r, Vx, Vy, Vz, tmp; + + /* Calculation of geocentric latitude. */ + lp.phi = atan (Q->radius_p2 * tan (lp.phi)); + + /* Calculation of the three components of the vector from satellite to + ** position on earth surface (lon,lat).*/ + r = (Q->radius_p) / hypot(Q->radius_p * cos (lp.phi), sin (lp.phi)); + Vx = r * cos (lp.lam) * cos (lp.phi); + Vy = r * sin (lp.lam) * cos (lp.phi); + Vz = r * sin (lp.phi); + + /* Check visibility. */ + if (((Q->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * Q->radius_p_inv2) < 0.) + F_ERROR; + + /* Calculation based on view angles from satellite. */ + tmp = Q->radius_g - Vx; + + if(Q->flip_axis) { + xy.x = Q->radius_g_1 * atan (Vy / hypot (Vz, tmp)); + xy.y = Q->radius_g_1 * atan (Vz / tmp); + } else { + xy.x = Q->radius_g_1 * atan (Vy / tmp); + xy.y = Q->radius_g_1 * atan (Vz / hypot (Vy, tmp)); + } + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double Vx, Vy, Vz, a, b, det, k; + + /* Setting three components of vector from satellite to position.*/ + Vx = -1.0; + if(Q->flip_axis) { + Vz = tan (xy.y / (Q->radius_g - 1.0)); + Vy = tan (xy.x / (Q->radius_g - 1.0)) * sqrt (1.0 + Vz * Vz); + } else { + Vy = tan (xy.x / (Q->radius_g - 1.0)); + Vz = tan (xy.y / (Q->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 * Q->radius_g * Vx; + if ((det = (b * b) - 4 * a * Q->C) < 0.) I_ERROR; + + /* Calculation of three components of vector from satellite to position.*/ + k = (-b - sqrt(det)) / (2 * a); + Vx = Q->radius_g + k * Vx; + Vy *= k; + Vz *= k; + + /* Calculation of longitude and latitude.*/ + lp.lam = atan2 (Vy, Vx); + lp.phi = atan (Vz * cos (lp.lam) / Vx); + + return lp; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double Vx, Vy, Vz, a, b, det, k; + + /* Setting three components of vector from satellite to position.*/ + Vx = -1.0; + + if(Q->flip_axis) { + Vz = tan (xy.y / Q->radius_g_1); + Vy = tan (xy.x / Q->radius_g_1) * hypot(1.0, Vz); + } else { + Vy = tan (xy.x / Q->radius_g_1); + Vz = tan (xy.y / Q->radius_g_1) * hypot(1.0, Vy); + } + + /* Calculation of terms in cubic equation and determinant.*/ + a = Vz / Q->radius_p; + a = Vy * Vy + a * a + Vx * Vx; + b = 2 * Q->radius_g * Vx; + if ((det = (b * b) - 4 * a * Q->C) < 0.) I_ERROR; + + /* Calculation of three components of vector from satellite to position.*/ + k = (-b - sqrt(det)) / (2. * a); + Vx = Q->radius_g + k * Vx; + Vy *= k; + Vz *= k; + + /* Calculation of longitude and latitude.*/ + lp.lam = atan2 (Vy, Vx); + lp.phi = atan (Vz * cos (lp.lam) / Vx); + lp.phi = atan (Q->radius_p_inv2 * tan (lp.phi)); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(geos) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if ((Q->h = pj_param(P->ctx, P->params, "dh").f) <= 0.) E_ERROR(-30); + + if (P->phi0) E_ERROR(-46); + + Q->sweep_axis = pj_param(P->ctx, P->params, "ssweep").s; + if (Q->sweep_axis == NULL) + Q->flip_axis = 0; + else { + if (Q->sweep_axis[1] != '\0' || + (Q->sweep_axis[0] != 'x' && + Q->sweep_axis[0] != 'y')) + E_ERROR(-49); + if (Q->sweep_axis[0] == 'x') + Q->flip_axis = 1; + else + Q->flip_axis = 0; + } + + Q->radius_g_1 = Q->h / P->a; + Q->radius_g = 1. + Q->radius_g_1; + Q->C = Q->radius_g * Q->radius_g - 1.0; + if (P->es) { + Q->radius_p = sqrt (P->one_es); + Q->radius_p2 = P->one_es; + Q->radius_p_inv2 = P->rone_es; + P->inv = e_inverse; + P->fwd = e_forward; + } else { + Q->radius_p = Q->radius_p2 = Q->radius_p_inv2 = 1.0; + P->inv = s_inverse; + P->fwd = s_forward; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_geos_selftest (void) {return 0;} +#else + +int pj_geos_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=geos +ellps=GRS80 +lat_1=0.5 +lat_2=2 +h=35785831"}; + char s_args[] = {"+proj=geos +a=6400000 +lat_1=0.5 +lat_2=2 +h=35785831"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222527.07036580026, 110551.30341332949}, + { 222527.07036580026, -110551.30341332949}, + {-222527.07036580026, 110551.30341332949}, + {-222527.07036580026, -110551.30341332949}, + }; + + XY s_fwd_expect[] = { + { 223289.45763579503, 111677.65745653701}, + { 223289.45763579503, -111677.65745653701}, + {-223289.45763579503, 111677.65745653701}, + {-223289.45763579503, -111677.65745653701}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305689715385, 0.00090436947723267452}, + { 0.0017966305689715385, -0.00090436947723267452}, + {-0.0017966305689715385, 0.00090436947723267452}, + {-0.0017966305689715385, -0.00090436947723267452}, + }; + + LP s_inv_expect[] = { + { 0.0017904931105078943, 0.00089524655504237148}, + { 0.0017904931105078943, -0.00089524655504237148}, + {-0.0017904931105078943, 0.00089524655504237148}, + {-0.0017904931105078943, -0.00089524655504237148}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_gins8.c b/proj4/src/PJ_gins8.c new file mode 100644 index 000000000000..48bdf3a558fb --- /dev/null +++ b/proj4/src/PJ_gins8.c @@ -0,0 +1,75 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph., no inv."; + +#define Cl 0.000952426 +#define Cp 0.162388 +#define C12 0.08333333333333333 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double t = lp.phi * lp.phi; + (void) P; + + xy.y = lp.phi * (1. + t * C12); + xy.x = lp.lam * (1. - Cp * t); + t = lp.lam * lp.lam; + xy.x *= (0.87 - Cl * t * t); + + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(gins8) { + P->es = 0.0; + P->inv = 0; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_gins8_selftest (void) {return 0;} +#else + +int pj_gins8_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=gins8 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 194350.25093959007, 111703.90763533533}, + { 194350.25093959007, -111703.90763533533}, + {-194350.25093959007, 111703.90763533533}, + {-194350.25093959007, -111703.90763533533}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_gn_sinu.c b/proj4/src/PJ_gn_sinu.c new file mode 100644 index 000000000000..b35ee290de1d --- /dev/null +++ b/proj4/src/PJ_gn_sinu.c @@ -0,0 +1,373 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph.\n\tm= n="; +PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") "\n\tPCyl, Sph&Ell"; +PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph."; +PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph."; + +#define EPS10 1e-10 +#define MAX_ITER 8 +#define LOOP_TOL 1e-7 + +struct pj_opaque { + double *en; + double m, n, C_x, C_y; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + double s, c; + + xy.y = pj_mlfn(lp.phi, s = sin(lp.phi), c = cos(lp.phi), P->opaque->en); + xy.x = lp.lam * c / sqrt(1. - P->es * s * s); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + double s; + + if ((s = fabs(lp.phi = pj_inv_mlfn(P->ctx, xy.y, P->es, P->opaque->en))) < M_HALFPI) { + s = sin(lp.phi); + lp.lam = xy.x * sqrt(1. - P->es * s * s) / cos(lp.phi); + } else if ((s - EPS10) < M_HALFPI) { + lp.lam = 0.; + } else { + I_ERROR; + } + + return lp; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + if (!Q->m) + lp.phi = Q->n != 1. ? aasin(P->ctx,Q->n * sin(lp.phi)): lp.phi; + else { + double k, V; + int i; + + k = Q->n * sin(lp.phi); + for (i = MAX_ITER; i ; --i) { + lp.phi -= V = (Q->m * lp.phi + sin(lp.phi) - k) / + (Q->m + cos(lp.phi)); + if (fabs(V) < LOOP_TOL) + break; + } + if (!i) + F_ERROR + } + xy.x = Q->C_x * lp.lam * (Q->m + cos(lp.phi)); + xy.y = Q->C_y * lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + xy.y /= Q->C_y; + lp.phi = Q->m ? aasin(P->ctx,(Q->m * xy.y + sin(xy.y)) / Q->n) : + ( Q->n != 1. ? aasin(P->ctx,sin(xy.y) / Q->n) : xy.y ); + lp.lam = xy.x / (Q->C_x * (Q->m + cos(xy.y))); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + if (P->opaque->en) + pj_dalloc(P->opaque->en); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +/* for spheres, only */ +static void setup(PJ *P) { + struct pj_opaque *Q = P->opaque; + P->es = 0; + P->inv = s_inverse; + P->fwd = s_forward; + + Q->C_x = (Q->C_y = sqrt((Q->m + 1.) / Q->n))/(Q->m + 1.); +} + + +PJ *PROJECTION(sinu) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (!(Q->en = pj_enfn(P->es))) + E_ERROR_0; + + if (P->es) { + P->inv = e_inverse; + P->fwd = e_forward; + } else { + Q->n = 1.; + Q->m = 0.; + setup(P); + } + return P; +} + + +PJ *PROJECTION(eck6) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->m = 1.; + Q->n = 2.570796326794896619231321691; + setup(P); + + return P; +} + + +PJ *PROJECTION(mbtfps) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->m = 0.5; + Q->n = 1.785398163397448309615660845; + setup(P); + + return P; +} + + +PJ *PROJECTION(gn_sinu) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (pj_param(P->ctx, P->params, "tn").i && pj_param(P->ctx, P->params, "tm").i) { + Q->n = pj_param(P->ctx, P->params, "dn").f; + Q->m = pj_param(P->ctx, P->params, "dm").f; + } else + E_ERROR(-99) + + setup(P); + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_sinu_selftest (void) {return 0;} +#else + +int pj_sinu_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=sinu +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=sinu +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222605.29953946592, 110574.38855415257}, + { 222605.29953946592, -110574.38855415257}, + {-222605.29953946592, 110574.38855415257}, + {-222605.29953946592, -110574.38855415257}, + }; + + XY s_fwd_expect[] = { + { 223368.11902663155, 111701.07212763709}, + { 223368.11902663155, -111701.07212763709}, + {-223368.11902663155, 111701.07212763709}, + {-223368.11902663155, -111701.07212763709}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305684613522, 0.00090436947707945409}, + { 0.0017966305684613522, -0.00090436947707945409}, + {-0.0017966305684613522, 0.00090436947707945409}, + {-0.0017966305684613522, -0.00090436947707945409}, + }; + + LP s_inv_expect[] = { + { 0.0017904931100023887, 0.00089524655489191132}, + { 0.0017904931100023887, -0.00089524655489191132}, + {-0.0017904931100023887, 0.00089524655489191132}, + {-0.0017904931100023887, -0.00089524655489191132}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + +#ifndef PJ_SELFTEST +int pj_eck6_selftest (void) {return 0;} +#else + +int pj_eck6_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=eck6 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 197021.60562899226, 126640.42073317352}, + { 197021.60562899226, -126640.42073317352}, + {-197021.60562899226, 126640.42073317352}, + {-197021.60562899226, -126640.42073317352}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.002029978749734037, 0.00078963032910382171}, + { 0.002029978749734037, -0.00078963032910382171}, + {-0.002029978749734037, 0.00078963032910382171}, + {-0.002029978749734037, -0.00078963032910382171}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + +#ifndef PJ_SELFTEST +int pj_mbtfps_selftest (void) {return 0;} +#else + +int pj_mbtfps_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=mbtfps +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 204740.11747857218, 121864.72971934026}, + { 204740.11747857218, -121864.72971934026}, + {-204740.11747857218, 121864.72971934026}, + {-204740.11747857218, -121864.72971934026}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0019534152166442065, 0.00082057965689633387}, + { 0.0019534152166442065, -0.00082057965689633387}, + {-0.0019534152166442065, 0.00082057965689633387}, + {-0.0019534152166442065, -0.00082057965689633387}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + + +#ifndef PJ_SELFTEST +int pj_gn_sinu_selftest (void) {return 0;} +#else + +int pj_gn_sinu_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=gn_sinu +a=6400000 +lat_1=0.5 +lat_2=2 +m=1 +n=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223385.13250469571, 111698.23644718733}, + { 223385.13250469571, -111698.23644718733}, + {-223385.13250469571, 111698.23644718733}, + {-223385.13250469571, -111698.23644718733}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931098931057, 0.00089524655491012516}, + { 0.0017904931098931057, -0.00089524655491012516}, + {-0.0017904931098931057, 0.00089524655491012516}, + {-0.0017904931098931057, -0.00089524655491012516}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_gnom.c b/proj4/src/PJ_gnom.c new file mode 100644 index 000000000000..37f5d71fd6f3 --- /dev/null +++ b/proj4/src/PJ_gnom.c @@ -0,0 +1,192 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph."; + +#define EPS10 1.e-10 +#define N_POLE 0 +#define S_POLE 1 +#define EQUIT 2 +#define OBLIQ 3 + +struct pj_opaque { + double sinph0; + double cosph0; + int mode; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, cosphi, sinphi; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + + switch (Q->mode) { + case EQUIT: + xy.y = cosphi * coslam; + break; + case OBLIQ: + xy.y = Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam; + break; + case S_POLE: + xy.y = - sinphi; + break; + case N_POLE: + xy.y = sinphi; + break; + } + + if (xy.y <= EPS10) F_ERROR; + + xy.x = (xy.y = 1. / xy.y) * cosphi * sin(lp.lam); + switch (Q->mode) { + case EQUIT: + xy.y *= sinphi; + break; + case OBLIQ: + xy.y *= Q->cosph0 * sinphi - Q->sinph0 * cosphi * coslam; + break; + case N_POLE: + coslam = - coslam; + case S_POLE: + xy.y *= cosphi * coslam; + break; + } + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rh, cosz, sinz; + + rh = hypot(xy.x, xy.y); + sinz = sin(lp.phi = atan(rh)); + cosz = sqrt(1. - sinz * sinz); + + if (fabs(rh) <= EPS10) { + lp.phi = P->phi0; + lp.lam = 0.; + } else { + switch (Q->mode) { + case OBLIQ: + lp.phi = cosz * Q->sinph0 + xy.y * sinz * Q->cosph0 / rh; + if (fabs(lp.phi) >= 1.) + lp.phi = lp.phi > 0. ? M_HALFPI : - M_HALFPI; + else + lp.phi = asin(lp.phi); + xy.y = (cosz - Q->sinph0 * sin(lp.phi)) * rh; + xy.x *= sinz * Q->cosph0; + break; + case EQUIT: + lp.phi = xy.y * sinz / rh; + if (fabs(lp.phi) >= 1.) + lp.phi = lp.phi > 0. ? M_HALFPI : - M_HALFPI; + else + lp.phi = asin(lp.phi); + xy.y = cosz * rh; + xy.x *= sinz; + break; + case S_POLE: + lp.phi -= M_HALFPI; + break; + case N_POLE: + lp.phi = M_HALFPI - lp.phi; + xy.y = -xy.y; + break; + } + lp.lam = atan2(xy.x, xy.y); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(gnom) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) { + Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; + } else if (fabs(P->phi0) < EPS10) { + Q->mode = EQUIT; + } else { + Q->mode = OBLIQ; + Q->sinph0 = sin(P->phi0); + Q->cosph0 = cos(P->phi0); + } + + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_gnom_selftest (void) {return 0;} +#else + +int pj_gnom_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=gnom +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223492.92474718543, 111780.50920659291}, + { 223492.92474718543, -111780.50920659291}, + {-223492.92474718543, 111780.50920659291}, + {-223492.92474718543, -111780.50920659291}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931092009798, 0.00089524655438192376}, + { 0.0017904931092009798, -0.00089524655438192376}, + {-0.0017904931092009798, 0.00089524655438192376}, + {-0.0017904931092009798, -0.00089524655438192376}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_goode.c b/proj4/src/PJ_goode.c new file mode 100644 index 000000000000..fd63fa8379da --- /dev/null +++ b/proj4/src/PJ_goode.c @@ -0,0 +1,122 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph."; + +#define Y_COR 0.05280 +#define PHI_LIM 0.71093078197902358062 + +C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); + +struct pj_opaque { + PJ *sinu; + PJ *moll; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + if (fabs(lp.phi) <= PHI_LIM) + xy = Q->sinu->fwd(lp, Q->sinu); + else { + xy = Q->moll->fwd(lp, Q->moll); + xy.y -= lp.phi >= 0.0 ? Y_COR : -Y_COR; + } + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + if (fabs(xy.y) <= PHI_LIM) + lp = Q->sinu->inv(xy, Q->sinu); + else { + xy.y += xy.y >= 0.0 ? Y_COR : -Y_COR; + lp = Q->moll->inv(xy, Q->moll); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc(P); + if (P->opaque->sinu) + pj_dealloc(P->opaque->sinu); + if (P->opaque->moll) + pj_dealloc(P->opaque->moll); + pj_dealloc (P->opaque); + return pj_dealloc(P); + +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(goode) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + P->es = 0.; + if (!(Q->sinu = pj_sinu(0)) || !(Q->moll = pj_moll(0))) + E_ERROR_0; + Q->sinu->es = 0.; + Q->sinu->ctx = P->ctx; + Q->moll->ctx = P->ctx; + if (!(Q->sinu = pj_sinu(Q->sinu)) || !(Q->moll = pj_moll(Q->moll))) + E_ERROR_0; + + P->fwd = s_forward; + P->inv = s_inverse; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_goode_selftest (void) {return 0;} +#else + +int pj_goode_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=goode +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223368.11902663155, 111701.07212763709}, { 223368.11902663155, -111701.07212763709}, {-223368.11902663155, 111701.07212763709}, {-223368.11902663155, -111701.07212763709}, }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931100023887, 0.00089524655489191132}, { 0.0017904931100023887, -0.00089524655489191132}, {-0.0017904931100023887, 0.00089524655489191132}, {-0.0017904931100023887, -0.00089524655489191132}, }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_gstmerc.c b/proj4/src/PJ_gstmerc.c new file mode 100644 index 000000000000..0951aacfb88b --- /dev/null +++ b/proj4/src/PJ_gstmerc.c @@ -0,0 +1,131 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") + "\n\tCyl, Sph&Ell\n\tlat_0= lon_0= k_0="; + +struct pj_opaque { + double lamc; + double phic; + double c; + double n1; + double n2; + double XS; + double YS; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double L, Ls, sinLs1, Ls1; + + L = Q->n1*lp.lam; + Ls = Q->c + Q->n1 * log(pj_tsfn(-1.0 * lp.phi, -1.0 * sin(lp.phi), P->e)); + sinLs1 = sin(L) / cosh(Ls); + Ls1 = log(pj_tsfn(-1.0 * asin(sinLs1), 0.0, 0.0)); + xy.x = (Q->XS + Q->n2*Ls1) * P->ra; + xy.y = (Q->YS + Q->n2*atan(sinh(Ls) / cos(L))) * P->ra; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double L, LC, sinC; + + L = atan(sinh((xy.x * P->a - Q->XS) / Q->n2) / cos((xy.y * P->a - Q->YS) / Q->n2)); + sinC = sin((xy.y * P->a - Q->YS) / Q->n2) / cosh((xy.x * P->a - Q->XS) / Q->n2); + LC = log(pj_tsfn(-1.0 * asin(sinC), 0.0, 0.0)); + lp.lam = L / Q->n1; + lp.phi = -1.0 * pj_phi2(P->ctx, exp((LC - Q->c) / Q->n1), P->e); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(gstmerc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->lamc = P->lam0; + Q->n1 = sqrt(1.0 + P->es * pow(cos(P->phi0), 4.0) / (1.0 - P->es)); + Q->phic = asin(sin(P->phi0) / Q->n1); + Q->c = log(pj_tsfn(-1.0 * Q->phic, 0.0, 0.0)) + - Q->n1 * log(pj_tsfn(-1.0 * P->phi0, -1.0 * sin(P->phi0), P->e)); + Q->n2 = P->k0 * P->a * sqrt(1.0 - P->es) / (1.0 - P->es * sin(P->phi0) * sin(P->phi0)); + Q->XS = 0; + Q->YS = -1.0 * Q->n2 * Q->phic; + + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_gstmerc_selftest (void) {return 0;} +#else + +int pj_gstmerc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=gstmerc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + + XY s_fwd_expect[] = { + { 223413.46640632182, 111769.14504058557}, + { 223413.46640632182, -111769.14504058668}, + {-223413.46640632302, 111769.14504058557}, + {-223413.46640632302, -111769.14504058668}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931097109673, 0.0008952465544509083}, + { 0.0017904931097109673, -0.0008952465544509083}, + {-0.0017904931097109673, 0.0008952465544509083}, + {-0.0017904931097109673, -0.0008952465544509083}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_hammer.c b/proj4/src/PJ_hammer.c new file mode 100644 index 000000000000..891baa007448 --- /dev/null +++ b/proj4/src/PJ_hammer.c @@ -0,0 +1,129 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") + "\n\tMisc Sph, \n\tW= M="; + +#define EPS 1.0e-10 + +struct pj_opaque { + double w; \ + double m, rm; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosphi, d; + + d = sqrt(2./(1. + (cosphi = cos(lp.phi)) * cos(lp.lam *= Q->w))); + xy.x = Q->m * d * cosphi * sin(lp.lam); + xy.y = Q->rm * d * sin(lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double z; + + z = sqrt(1. - 0.25*Q->w*Q->w*xy.x*xy.x - 0.25*xy.y*xy.y); + if (fabs(2.*z*z-1.) < EPS) { + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + pj_errno = -14; + } else { + lp.lam = aatan2(Q->w * xy.x * z,2. * z * z - 1)/Q->w; + lp.phi = aasin(P->ctx,z * xy.y); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(hammer) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (pj_param(P->ctx, P->params, "tW").i) { + if ((Q->w = fabs(pj_param(P->ctx, P->params, "dW").f)) <= 0.) E_ERROR(-27); + } else + Q->w = .5; + if (pj_param(P->ctx, P->params, "tM").i) { + if ((Q->m = fabs(pj_param(P->ctx, P->params, "dM").f)) <= 0.) E_ERROR(-27); + } else + Q->m = 1.; + + Q->rm = 1. / Q->m; + Q->m /= Q->w; + + P->es = 0.; + P->fwd = s_forward; + P->inv = s_inverse; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_hammer_selftest (void) {return 0;} +#else + +int pj_hammer_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=hammer +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223373.78870324057, 111703.90739776699}, + { 223373.78870324057, -111703.90739776699}, + {-223373.78870324057, 111703.90739776699}, + {-223373.78870324057, -111703.90739776699}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.001790493109965961, 0.00089524655487369749}, + { 0.001790493109965961, -0.00089524655487369749}, + {-0.001790493109965961, 0.00089524655487369749}, + {-0.001790493109965961, -0.00089524655487369749}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_hatano.c b/proj4/src/PJ_hatano.c new file mode 100644 index 000000000000..9e681a3d8a54 --- /dev/null +++ b/proj4/src/PJ_hatano.c @@ -0,0 +1,134 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph."; + +#define NITER 20 +#define EPS 1e-7 +#define ONETOL 1.000001 +#define CN 2.67595 +#define CS 2.43763 +#define RCN 0.37369906014686373063 +#define RCS 0.41023453108141924738 +#define FYCN 1.75859 +#define FYCS 1.93052 +#define RYCN 0.56863737426006061674 +#define RYCS 0.51799515156538134803 +#define FXC 0.85 +#define RXC 1.17647058823529411764 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double th1, c; + int i; + (void) P; + + c = sin(lp.phi) * (lp.phi < 0. ? CS : CN); + for (i = NITER; i; --i) { + lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi)); + if (fabs(th1) < EPS) break; + } + xy.x = FXC * lp.lam * cos(lp.phi *= .5); + xy.y = sin(lp.phi) * (lp.phi < 0. ? FYCS : FYCN); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double th; + + th = xy.y * ( xy.y < 0. ? RYCS : RYCN); + if (fabs(th) > 1.) { + if (fabs(th) > ONETOL) { + I_ERROR; + } else { + th = th > 0. ? M_HALFPI : - M_HALFPI; + } + } else { + th = asin(th); + } + + lp.lam = RXC * xy.x / cos(th); + th += th; + lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN); + if (fabs(lp.phi) > 1.) { + if (fabs(lp.phi) > ONETOL) { + I_ERROR; + } else { + lp.phi = lp.phi > 0. ? M_HALFPI : - M_HALFPI; + } + } else { + lp.phi = asin(lp.phi); + } + + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(hatano) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_hatano_selftest (void) {return 0;} +#else + +int pj_hatano_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=hatano +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 189878.87894652804, 131409.8024406255 }, + { 189881.08195244463, -131409.14227607418 }, + {-189878.87894652804, 131409.8024406255 }, + {-189881.08195244463, -131409.14227607418 }, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0021064624821817597, 0.00076095689425791926 }, + { 0.0021064624821676096, -0.00076095777439265377 }, + {-0.0021064624821817597, 0.00076095689425791926 }, + {-0.0021064624821676096, -0.00076095777439265377 }, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_healpix.c b/proj4/src/PJ_healpix.c new file mode 100644 index 000000000000..c5374df7b070 --- /dev/null +++ b/proj4/src/PJ_healpix.c @@ -0,0 +1,781 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the HEALPix and rHEALPix projections. + * For background see . + * Authors: Alex Raichev (raichev@cs.auckland.ac.nz) + * Michael Speth (spethm@landcareresearch.co.nz) + * Notes: Raichev implemented these projections in Python and + * Speth translated them into C here. + ****************************************************************************** + * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substcounteral 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 + +PROJ_HEAD(healpix, "HEALPix") "\n\tSph., Ellps."; +PROJ_HEAD(rhealpix, "rHEALPix") "\n\tSph., Ellps.\n\tnorth_square= south_square="; + +# include +/* Matrix for counterclockwise rotation by pi/2: */ +# define R1 {{ 0,-1},{ 1, 0}} +/* Matrix for counterclockwise rotation by pi: */ +# define R2 {{-1, 0},{ 0,-1}} +/* Matrix for counterclockwise rotation by 3*pi/2: */ +# define R3 {{ 0, 1},{-1, 0}} +/* Identity matrix */ +# define IDENT {{1, 0},{0, 1}} +/* IDENT, R1, R2, R3, R1 inverse, R2 inverse, R3 inverse:*/ +# define ROT {IDENT, R1, R2, R3, R3, R2, R1} +/* Fuzz to handle rounding errors: */ +# define EPS 1e-15 + +struct pj_opaque { + int north_square; + int south_square; + double qp; + double *apa; +}; + +typedef struct { + int cn; /* An integer 0--3 indicating the position of the polar cap. */ + double x, y; /* Coordinates of the pole point (point of most extreme latitude on the polar caps). */ + enum Region {north, south, equatorial} region; +} CapMap; + +double rot[7][2][2] = ROT; + +/** + * 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 pj_sign (double v) { + return v > 0 ? 1 : (v < 0 ? -1 : 0); +} + + +/** + * Return the index of the matrix in ROT. + * @param index ranges from -3 to 3. + */ +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; +} + + +/** + * Return 1 if point (testx, testy) lies in the interior of the polygon + * determined by the vertices in vert, and return 0 otherwise. + * See http://paulbourke.net/geometry/polygonmesh/ for more details. + * @param nvert the number of vertices in the polygon. + * @param vert the (x, y)-coordinates of the polygon's vertices + **/ +static int pnpoly(int nvert, double vert[][2], double testx, double testy) { + int i, c = 0; + int counter = 0; + double xinters; + XY p1, p2; + + /* Check for boundrary cases */ + for (i = 0; i < nvert; i++) { + if (testx == vert[i][0] && testy == vert[i][1]) { + return 1; + } + } + + 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) && + testy <= MAX(p1.y, p2.y) && + testx <= MAX(p1.x, p2.x) && + 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; +} + + +/** + * Return 1 if (x, y) lies in (the interior or boundary of) the image of the + * HEALPix projection (in case proj=0) or in the image the rHEALPix projection + * (in case proj=1), and return 0 otherwise. + * @param north_square the position of the north polar square (rHEALPix only) + * @param south_square the position of the south polar square (rHEALPix only) + **/ +int in_image(double x, double y, int proj, int north_square, int south_square) { + if (proj == 0) { + double healpixVertsJit[][2] = { + {-M_PI - EPS, M_FORTPI}, + {-3*M_FORTPI, M_HALFPI + EPS}, + {-M_HALFPI, M_FORTPI + EPS}, + {-M_FORTPI, M_HALFPI + EPS}, + {0.0, M_FORTPI + EPS}, + {M_FORTPI, M_HALFPI + EPS}, + {M_HALFPI, M_FORTPI + EPS}, + {3*M_FORTPI, M_HALFPI + EPS}, + {M_PI + EPS, M_FORTPI}, + {M_PI + EPS, -M_FORTPI}, + {3*M_FORTPI, -M_HALFPI - EPS}, + {M_HALFPI, -M_FORTPI - EPS}, + {M_FORTPI, -M_HALFPI - EPS}, + {0.0, -M_FORTPI - EPS}, + {-M_FORTPI, -M_HALFPI - EPS}, + {-M_HALFPI, -M_FORTPI - EPS}, + {-3*M_FORTPI, -M_HALFPI - EPS}, + {-M_PI - EPS, -M_FORTPI} + }; + return pnpoly((int)sizeof(healpixVertsJit)/ + sizeof(healpixVertsJit[0]), healpixVertsJit, x, y); + } else { + /** + * Assigning each element by index to avoid warnings such as + * 'initializer element is not computable at load time'. + * Before C99 this was not allowed and to keep as portable as + * possible we do it the C89 way here. + * We need to assign the array this way because the input is + * dynamic (north_square and south_square vars are unknow at + * compile time). + **/ + double rhealpixVertsJit[12][2]; + rhealpixVertsJit[0][0] = -M_PI - EPS; + rhealpixVertsJit[0][1] = M_FORTPI + EPS; + rhealpixVertsJit[1][0] = -M_PI + north_square*M_HALFPI- EPS; + rhealpixVertsJit[1][1] = M_FORTPI + EPS; + rhealpixVertsJit[2][0] = -M_PI + north_square*M_HALFPI- EPS; + rhealpixVertsJit[2][1] = 3*M_FORTPI + EPS; + rhealpixVertsJit[3][0] = -M_PI + (north_square + 1.0)*M_HALFPI + EPS; + rhealpixVertsJit[3][1] = 3*M_FORTPI + EPS; + rhealpixVertsJit[4][0] = -M_PI + (north_square + 1.0)*M_HALFPI + EPS; + rhealpixVertsJit[4][1] = M_FORTPI + EPS; + rhealpixVertsJit[5][0] = M_PI + EPS; + rhealpixVertsJit[5][1] = M_FORTPI + EPS; + rhealpixVertsJit[6][0] = M_PI + EPS; + rhealpixVertsJit[6][1] = -M_FORTPI - EPS; + rhealpixVertsJit[7][0] = -M_PI + (south_square + 1.0)*M_HALFPI + EPS; + rhealpixVertsJit[7][1] = -M_FORTPI - EPS; + rhealpixVertsJit[8][0] = -M_PI + (south_square + 1.0)*M_HALFPI + EPS; + rhealpixVertsJit[8][1] = -3*M_FORTPI - EPS; + rhealpixVertsJit[9][0] = -M_PI + south_square*M_HALFPI - EPS; + rhealpixVertsJit[9][1] = -3*M_FORTPI - EPS; + rhealpixVertsJit[10][0] = -M_PI + south_square*M_HALFPI - EPS; + rhealpixVertsJit[10][1] = -M_FORTPI - EPS; + rhealpixVertsJit[11][0] = -M_PI - EPS; + rhealpixVertsJit[11][1] = -M_FORTPI - EPS; + + return pnpoly((int)sizeof(rhealpixVertsJit)/ + sizeof(rhealpixVertsJit[0]), rhealpixVertsJit, x, y); + } +} + + +/** + * Return the authalic latitude of latitude alpha (if inverse=0) or + * return the approximate latitude of authalic latitude alpha (if inverse=1). + * P contains the relavent ellipsoid parameters. + **/ +double auth_lat(PJ *P, double alpha, int inverse) { + struct pj_opaque *Q = P->opaque; + if (inverse == 0) { + /* Authalic latitude. */ + double q = pj_qsfn(sin(alpha), P->e, 1.0 - P->es); + double qp = Q->qp; + double ratio = q/qp; + + if (fabsl(ratio) > 1) { + /* Rounding error. */ + ratio = pj_sign(ratio); + } + return asin(ratio); + } else { + /* Approximation to inverse authalic latitude. */ + return pj_authlat(alpha, Q->apa); + } +} + + +/** + * Return the HEALPix projection of the longitude-latitude point lp on + * the unit sphere. +**/ +XY healpix_sphere(LP lp) { + double lam = lp.lam; + double phi = lp.phi; + double phi0 = asin(2.0/3.0); + XY xy; + + /* equatorial region */ + if ( fabsl(phi) <= phi0) { + xy.x = lam; + xy.y = 3*M_PI/8*sin(phi); + } else { + double lamc; + double sigma = sqrt(3*(1 - fabsl(sin(phi)))); + double cn = floor(2*lam / M_PI + 2); + if (cn >= 4) { + cn = 3; + } + lamc = -3*M_FORTPI + M_HALFPI*cn; + xy.x = lamc + (lam - lamc)*sigma; + xy.y = pj_sign(phi)*M_FORTPI*(2 - sigma); + } + return xy; +} + + +/** + * Return the inverse of healpix_sphere(). +**/ +LP healpix_sphere_inverse(XY xy) { + LP lp; + double x = xy.x; + double y = xy.y; + double y0 = M_FORTPI; + + /* Equatorial region. */ + if (fabsl(y) <= y0) { + lp.lam = x; + lp.phi = asin(8*y/(3*M_PI)); + } else if (fabsl(y) < M_HALFPI) { + double cn = floor(2*x/M_PI + 2); + double xc, tau; + if (cn >= 4) { + cn = 3; + } + xc = -3*M_FORTPI + M_HALFPI*cn; + tau = 2.0 - 4*fabsl(y)/M_PI; + lp.lam = xc + (x - xc)/tau; + lp.phi = pj_sign(y)*asin(1.0 - pow(tau, 2)/3.0); + } else { + lp.lam = -M_PI; + lp.phi = pj_sign(y)*M_HALFPI; + } + return (lp); +} + + +/** + * Return the vector sum a + b, where a and b are 2-dimensional vectors. + * @param ret holds a + b. + **/ +static void vector_add(double a[2], double b[2], double *ret) { + int i; + for(i = 0; i < 2; i++) { + ret[i] = a[i] + b[i]; + } +} + + +/** + * Return the vector difference a - b, where a and b are 2-dimensional vectors. + * @param ret holds a - b. + **/ +static void vector_sub(double a[2], double b[2], double*ret) { + int i; + for(i = 0; i < 2; i++) { + ret[i] = a[i] - b[i]; + } +} + + +/** + * Return the 2 x 1 matrix product a*b, where a is a 2 x 2 matrix and + * b is a 2 x 1 matrix. + * @param ret holds a*b. + **/ +static void dot_product(double a[2][2], double b[2], 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]; + } + } +} + + +/** + * Return the number of the polar cap, the pole point coordinates, and + * the region that (x, y) lies in. + * If inverse=0, then assume (x,y) lies in the image of the HEALPix + * projection of the unit sphere. + * If inverse=1, then assume (x,y) lies in the image of the + * (north_square, south_square)-rHEALPix projection of the unit sphere. + **/ +static CapMap get_cap(double x, double y, int north_square, int south_square, + int inverse) { + CapMap capmap; + double c; + + capmap.x = x; + capmap.y = y; + if (inverse == 0) { + if (y > M_FORTPI) { + capmap.region = north; + c = M_HALFPI; + } else if (y < -M_FORTPI) { + capmap.region = south; + c = -M_HALFPI; + } else { + capmap.region = equatorial; + capmap.cn = 0; + return capmap; + } + /* polar region */ + if (x < -M_HALFPI) { + capmap.cn = 0; + capmap.x = (-3*M_FORTPI); + capmap.y = c; + } else if (x >= -M_HALFPI && x < 0) { + capmap.cn = 1; + capmap.x = -M_FORTPI; + capmap.y = c; + } else if (x >= 0 && x < M_HALFPI) { + capmap.cn = 2; + capmap.x = M_FORTPI; + capmap.y = c; + } else { + capmap.cn = 3; + capmap.x = 3*M_FORTPI; + capmap.y = c; + } + } else { + if (y > M_FORTPI) { + capmap.region = north; + capmap.x = -3*M_FORTPI + north_square*M_HALFPI; + capmap.y = M_HALFPI; + x = x - north_square*M_HALFPI; + } else if (y < -M_FORTPI) { + capmap.region = south; + capmap.x = -3*M_FORTPI + south_square*M_HALFPI; + capmap.y = -M_HALFPI; + x = x - south_square*M_HALFPI; + } else { + capmap.region = equatorial; + capmap.cn = 0; + return capmap; + } + /* Polar Region, find the HEALPix polar cap number that + x, y moves to when rHEALPix polar square is disassembled. */ + if (capmap.region == north) { + if (y >= -x - M_FORTPI - EPS && y < x + 5*M_FORTPI - EPS) { + capmap.cn = (north_square + 1) % 4; + } else if (y > -x -M_FORTPI + EPS && y >= x + 5*M_FORTPI - EPS) { + capmap.cn = (north_square + 2) % 4; + } else if (y <= -x -M_FORTPI + EPS && y > x + 5*M_FORTPI + EPS) { + capmap.cn = (north_square + 3) % 4; + } else { + capmap.cn = north_square; + } + } else if (capmap.region == south) { + if (y <= x + M_FORTPI + EPS && y > -x - 5*M_FORTPI + EPS) { + capmap.cn = (south_square + 1) % 4; + } else if (y < x + M_FORTPI - EPS && y <= -x - 5*M_FORTPI + EPS) { + capmap.cn = (south_square + 2) % 4; + } else if (y >= x + M_FORTPI - EPS && y < -x - 5*M_FORTPI - EPS) { + capmap.cn = (south_square + 3) % 4; + } else { + capmap.cn = south_square; + } + } + } + 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 north_square and + * the south polar square in position south_square. + * If inverse=1, then uncombine the polar caps. + * @param north_square integer between 0 and 3. + * @param south_square integer between 0 and 3. + **/ +static XY combine_caps(double x, double y, int north_square, int south_square, + int inverse) { + XY xy; + double v[2]; + double a[2]; + double c[2]; + double vector[2]; + double v_min_c[2]; + double ret_dot[2]; + double (*tmpRot)[2]; + int pole = 0; + + CapMap capmap = get_cap(x, y, north_square, south_square, inverse); + if (capmap.region == equatorial) { + xy.x = capmap.x; + xy.y = capmap.y; + return xy; + } + + v[0] = x; v[1] = y; + c[0] = capmap.x; c[1] = capmap.y; + + if (inverse == 0) { + /* Rotate (x, y) about its polar cap tip and then translate it to + north_square or south_square. */ + a[0] = -3*M_FORTPI + pole*M_HALFPI; + a[1] = M_HALFPI; + if (capmap.region == north) { + pole = north_square; + tmpRot = rot[get_rotate_index(capmap.cn - pole)]; + } else { + pole = south_square; + tmpRot = rot[get_rotate_index(-1*(capmap.cn - pole))]; + } + } else { + /* Inverse function. + Unrotate (x, y) and then translate it back. */ + a[0] = -3*M_FORTPI + capmap.cn*M_HALFPI; + a[1] = M_HALFPI; + /* disassemble */ + if (capmap.region == north) { + pole = north_square; + tmpRot = rot[get_rotate_index(-1*(capmap.cn - pole))]; + } else { + pole = south_square; + 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; +} + + +static XY s_healpix_forward(LP lp, PJ *P) { /* sphere */ + (void) P; + return healpix_sphere(lp); +} + + +static XY e_healpix_forward(LP lp, PJ *P) { /* ellipsoid */ + lp.phi = auth_lat(P, lp.phi, 0); + return healpix_sphere(lp); +} + + +static LP s_healpix_inverse(XY xy, PJ *P) { /* sphere */ + /* Check whether (x, y) lies in the HEALPix image */ + if (in_image(xy.x, xy.y, 0, 0, 0) == 0) { + LP lp = {HUGE_VAL, HUGE_VAL}; + pj_ctx_set_errno(P->ctx, -15); + return lp; + } + return healpix_sphere_inverse(xy); +} + + +static LP e_healpix_inverse(XY xy, PJ *P) { /* ellipsoid */ + LP lp = {0.0,0.0}; + + /* Check whether (x, y) lies in the HEALPix image. */ + if (in_image(xy.x, xy.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_inverse(xy); + lp.phi = auth_lat(P, lp.phi, 1); + return lp; +} + + +static XY s_rhealpix_forward(LP lp, PJ *P) { /* sphere */ + struct pj_opaque *Q = P->opaque; + + XY xy = healpix_sphere(lp); + return combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 0); +} + + +static XY e_rhealpix_forward(LP lp, PJ *P) { /* ellipsoid */ + struct pj_opaque *Q = P->opaque; + XY xy; + lp.phi = auth_lat(P, lp.phi, 0); + xy = healpix_sphere(lp); + return combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 0); +} + + +static LP s_rhealpix_inverse(XY xy, PJ *P) { /* sphere */ + struct pj_opaque *Q = P->opaque; + + /* Check whether (x, y) lies in the rHEALPix image. */ + if (in_image(xy.x, xy.y, 1, Q->north_square, Q->south_square) == 0) { + LP lp = {HUGE_VAL, HUGE_VAL}; + pj_ctx_set_errno(P->ctx, -15); + return lp; + } + xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1); + return healpix_sphere_inverse(xy); +} + + +static LP e_rhealpix_inverse(XY xy, PJ *P) { /* ellipsoid */ + struct pj_opaque *Q = P->opaque; + LP lp = {0.0,0.0}; + + /* Check whether (x, y) lies in the rHEALPix image. */ + if (in_image(xy.x, xy.y, 1, Q->north_square, Q->south_square) == 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, Q->north_square, Q->south_square, 1); + lp = healpix_sphere_inverse(xy); + lp.phi = auth_lat(P, lp.phi, 1); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + if (P->opaque->apa) + pj_dealloc(P->opaque->apa); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(healpix) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (P->es) { + Q->apa = pj_authset(P->es); /* For auth_lat(). */ + Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ + P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */ + P->ra = 1.0/P->a; + P->fwd = e_healpix_forward; + P->inv = e_healpix_inverse; + } else { + P->fwd = s_healpix_forward; + P->inv = s_healpix_inverse; + } + + return P; +} + + +PJ *PROJECTION(rhealpix) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->north_square = pj_param(P->ctx, P->params,"inorth_square").i; + Q->south_square = pj_param(P->ctx, P->params,"isouth_square").i; + + /* Check for valid north_square and south_square inputs. */ + if (Q->north_square < 0 || Q->north_square > 3) { + E_ERROR(-47); + } + if (Q->south_square < 0 || Q->south_square > 3) { + E_ERROR(-47); + } + if (P->es) { + Q->apa = pj_authset(P->es); /* For auth_lat(). */ + Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ + P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */ + P->ra = 1.0/P->a; + P->fwd = e_rhealpix_forward; + P->inv = e_rhealpix_inverse; + } else { + P->fwd = s_rhealpix_forward; + P->inv = s_rhealpix_inverse; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_healpix_selftest (void) {return 0;} +#else + +int pj_healpix_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=healpix +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=healpix +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222390.10394923863, 130406.58866448226}, + { 222390.10394923863, -130406.58866448054}, + {-222390.10394923863, 130406.58866448226}, + {-222390.10394923863, -130406.58866448054}, + }; + + XY s_fwd_expect[] = { + { 223402.14425527418, 131588.04444199943}, + { 223402.14425527418, -131588.04444199943}, + {-223402.14425527418, 131588.04444199943}, + {-223402.14425527418, -131588.04444199943}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017986411845524453, 0.00076679453057823619}, + { 0.0017986411845524453, -0.00076679453057823619}, + {-0.0017986411845524453, 0.00076679453057823619}, + {-0.0017986411845524453, -0.00076679453057823619}, + }; + + LP s_inv_expect[] = { + { 0.0017904931097838226, 0.00075990887733981202}, + { 0.0017904931097838226, -0.00075990887733981202}, + {-0.0017904931097838226, 0.00075990887733981202}, + {-0.0017904931097838226, -0.00075990887733981202}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + +#ifndef PJ_SELFTEST +int pj_rhealpix_selftest (void) {return 0;} +#else + +int pj_rhealpix_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=rhealpix +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=rhealpix +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222390.10394923863, 130406.58866448226}, + { 222390.10394923863, -130406.58866448054}, + {-222390.10394923863, 130406.58866448226}, + {-222390.10394923863, -130406.58866448054}, + }; + + XY s_fwd_expect[] = { + { 223402.14425527418, 131588.04444199943}, + { 223402.14425527418, -131588.04444199943}, + {-223402.14425527418, 131588.04444199943}, + {-223402.14425527418, -131588.04444199943}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017986411845524453, 0.00076679453057823619}, + { 0.0017986411845524453, -0.00076679453057823619}, + {-0.0017986411845524453, 0.00076679453057823619}, + {-0.0017986411845524453, -0.00076679453057823619}, + }; + + LP s_inv_expect[] = { + { 0.0017904931097838226, 0.00075990887733981202}, + { 0.0017904931097838226, -0.00075990887733981202}, + {-0.0017904931097838226, 0.00075990887733981202}, + {-0.0017904931097838226, -0.00075990887733981202}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_igh.c b/proj4/src/PJ_igh.c new file mode 100644 index 000000000000..87efd6e76c8e --- /dev/null +++ b/proj4/src/PJ_igh.c @@ -0,0 +1,270 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(igh, "Interrupted Goode Homolosine") "\n\tPCyl, Sph."; + +C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); + +/* 40d 44' 11.8" [degrees] */ +/* +static const double d4044118 = (40 + 44/60. + 11.8/3600.) * DEG_TO_RAD; +has been replaced by this define, to eliminate portability issue: +Initializer element not computable at load time +*/ +#define d4044118 ((40 + 44/60. + 11.8/3600.) * DEG_TO_RAD) + +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 */ + +struct pj_opaque { + struct PJconsts* pj[12]; \ + double dy0; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + 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 -= Q->pj[z-1]->lam0; + xy = Q->pj[z-1]->fwd(lp, Q->pj[z-1]); + xy.x += Q->pj[z-1]->x0; + xy.y += Q->pj[z-1]->y0; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + const double y90 = Q->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 -= Q->pj[z-1]->x0; + xy.y -= Q->pj[z-1]->y0; + lp = Q->pj[z-1]->inv(xy, Q->pj[z-1]); + lp.lam += Q->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) lp.lam = HUGE_VAL; + if (!z) lp.phi = HUGE_VAL; + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + int i; + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + for (i = 0; i < 12; ++i) { + if (P->opaque->pj[i]) + pj_dealloc(P->opaque->pj[i]); + } + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + + +/* + 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 (!(Q->pj[n-1] = pj_##proj(0))) E_ERROR_0; \ + if (!(Q->pj[n-1] = pj_##proj(Q->pj[n-1]))) E_ERROR_0; \ + Q->pj[n-1]->x0 = x_0; \ + Q->pj[n-1]->y0 = y_0; \ + Q->pj[n-1]->lam0 = lon_0; + + +PJ *PROJECTION(igh) { + XY xy1, xy3; + LP lp = { 0, d4044118 }; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + /* 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 = Q->pj[0]->fwd(lp, Q->pj[0]); /* zone 1 */ + xy3 = Q->pj[2]->fwd(lp, Q->pj[2]); /* zone 3 */ + /* y0 + xy1.y = xy3.y for lt = 40d44'11.8" */ + Q->dy0 = xy3.y - xy1.y; + + Q->pj[0]->y0 = Q->dy0; + + /* mollweide zones (cont'd) */ + SETUP( 2, moll, d30, Q->dy0, d30); + SETUP( 9, moll, -d160, -Q->dy0, -d160); + SETUP(10, moll, -d60, -Q->dy0, -d60); + SETUP(11, moll, d20, -Q->dy0, d20); + SETUP(12, moll, d140, -Q->dy0, d140); + + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_igh_selftest (void) {return 0;} +#else + +int pj_igh_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=igh +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223878.49745627123, 111701.07212763709}, + { 223708.37131305804, -111701.07212763709}, + {-222857.74059699223, 111701.07212763709}, + {-223027.86674020503, -111701.07212763709}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.001790489447892545, 0.00089524655489191132}, + { 0.0017904906685957927, -0.00089524655489191132}, + {-0.001790496772112032, 0.00089524655489191132}, + {-0.0017904955514087843, -0.00089524655489191132}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_imw_p.c b/proj4/src/PJ_imw_p.c new file mode 100644 index 000000000000..b3ca185e23ed --- /dev/null +++ b/proj4/src/PJ_imw_p.c @@ -0,0 +1,238 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(imw_p, "International Map of the World Polyconic") + "\n\tMod. Polyconic, Ell\n\tlat_1= and lat_2= [lon_1=]"; + +#define TOL 1e-10 +#define EPS 1e-10 + +struct pj_opaque { + double P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2; \ + double phi_1, phi_2, lam_1; \ + double *en; \ + int mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */ +}; + + +static int phi12(PJ *P, double *del, double *sig) { + struct pj_opaque *Q = P->opaque; + int err = 0; + + if (!pj_param(P->ctx, P->params, "tlat_1").i || + !pj_param(P->ctx, P->params, "tlat_2").i) { + err = -41; + } else { + Q->phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; + Q->phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; + *del = 0.5 * (Q->phi_2 - Q->phi_1); + *sig = 0.5 * (Q->phi_2 + Q->phi_1); + err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0; + } + return err; +} + + +static XY loc_for(LP lp, PJ *P, double *yc) { + struct pj_opaque *Q = P->opaque; + XY xy; + + if (! lp.phi) { + xy.x = lp.lam; + xy.y = 0.; + } else { + double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C; + + sp = sin(lp.phi); + m = pj_mlfn(lp.phi, sp, cos(lp.phi), Q->en); + xa = Q->Pp + Q->Qp * m; + ya = Q->P + Q->Q * m; + R = 1. / (tan(lp.phi) * sqrt(1. - P->es * sp * sp)); + C = sqrt(R * R - xa * xa); + if (lp.phi < 0.) C = - C; + C += ya - R; + if (Q->mode < 0) { + xb = lp.lam; + yb = Q->C2; + } else { + t = lp.lam * Q->sphi_2; + xb = Q->R_2 * sin(t); + yb = Q->C2 + Q->R_2 * (1. - cos(t)); + } + if (Q->mode > 0) { + xc = lp.lam; + *yc = 0.; + } else { + t = lp.lam * Q->sphi_1; + xc = Q->R_1 * sin(t); + *yc = Q->R_1 * (1. - cos(t)); + } + D = (xb - xc)/(yb - *yc); + B = xc + D * (C + R - *yc); + xy.x = D * sqrt(R * R * (1 + D * D) - B * B); + if (lp.phi > 0) + xy.x = - xy.x; + xy.x = (B + xy.x) / (1. + D * D); + xy.y = sqrt(R * R - xy.x * xy.x); + if (lp.phi > 0) + xy.y = - xy.y; + xy.y += C + R; + } + return xy; +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + double yc; + + xy = loc_for(lp, P, &yc); + return (xy); +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + XY t; + double yc; + + lp.phi = Q->phi_2; + lp.lam = xy.x / cos(lp.phi); + do { + t = loc_for(lp, P, &yc); + lp.phi = ((lp.phi - Q->phi_1) * (xy.y - yc) / (t.y - yc)) + Q->phi_1; + lp.lam = lp.lam * xy.x / t.x; + } while (fabs(t.x - xy.x) > TOL || fabs(t.y - xy.y) > TOL); + + return lp; +} + + +static void xy(PJ *P, double phi, double *x, double *y, double *sp, double *R) { + double F; + + *sp = sin(phi); + *R = 1./(tan(phi) * sqrt(1. - P->es * *sp * *sp )); + F = P->opaque->lam_1 * *sp; + *y = *R * (1 - cos(F)); + *x = *R * sin(F); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(imw_p) { + double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2; + int i; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (!(Q->en = pj_enfn(P->es))) E_ERROR_0; + if( (i = phi12(P, &del, &sig)) != 0) + E_ERROR(i); + if (Q->phi_2 < Q->phi_1) { /* make sure P->phi_1 most southerly */ + del = Q->phi_1; + Q->phi_1 = Q->phi_2; + Q->phi_2 = del; + } + if (pj_param(P->ctx, P->params, "tlon_1").i) + Q->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.; + else if (sig <= 76) sig = 4.; + else sig = 8.; + Q->lam_1 = sig * DEG_TO_RAD; + } + Q->mode = 0; + if (Q->phi_1) xy(P, Q->phi_1, &x1, &y1, &Q->sphi_1, &Q->R_1); + else { + Q->mode = 1; + y1 = 0.; + x1 = Q->lam_1; + } + if (Q->phi_2) xy(P, Q->phi_2, &x2, &T2, &Q->sphi_2, &Q->R_2); + else { + Q->mode = -1; + T2 = 0.; + x2 = Q->lam_1; + } + m1 = pj_mlfn(Q->phi_1, Q->sphi_1, cos(Q->phi_1), Q->en); + m2 = pj_mlfn(Q->phi_2, Q->sphi_2, cos(Q->phi_2), Q->en); + t = m2 - m1; + s = x2 - x1; + y2 = sqrt(t * t - s * s) + y1; + Q->C2 = y2 - T2; + t = 1. / t; + Q->P = (m2 * y1 - m1 * y2) * t; + Q->Q = (y2 - y1) * t; + Q->Pp = (m2 * x1 - m1 * x2) * t; + Q->Qp = (x2 - x1) * t; + + P->fwd = e_forward; + P->inv = e_inverse; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_imw_p_selftest (void) {return 0;} +#else + +int pj_imw_p_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=imw_p +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222588.4411393762, 55321.128653809537}, + { 222756.90637768712, -165827.58428832365}, + {-222588.4411393762, 55321.128653809537}, + {-222756.90637768712, -165827.58428832365}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966991379592214, 0.50090492361427374}, + { 0.0017966979081574697, 0.49909507588689922}, + {-0.0017966991379592214, 0.50090492361427374}, + {-0.0017966979081574697, 0.49909507588689922}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_isea.c b/proj4/src/PJ_isea.c new file mode 100644 index 000000000000..34a2aac881b9 --- /dev/null +++ b/proj4/src/PJ_isea.c @@ -0,0 +1,1176 @@ +/* + * This code was entirely written by Nathan Wagner + * and is in the public domain. + */ + +#include +#include +#include +#include + +#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(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, 0.0, 0.0, 0.0, 0.0, 0.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 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 */ + z = acos(sin(center.lat) * sin(ll->lat) + + cos(center.lat) * cos(ll->lat) * cos(ll->lon - center.lon)); + /* not on this triangle */ + if (z > g + 0.000005) { /* TODO DBL_EPSILON */ + continue; + } + + Az = sph_azimuth(center.lon, center.lat, ll->lon, ll->lat); + + /* 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(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(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; + + 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); + + 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; + struct isea_pt out, coord; + + tri = isea_transform(g, in, &out); + + 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 PJ_LIB__ +#include + +PROJ_HEAD(isea, "Icosahedral Snyder Equal Area") "\n\tSph"; + +struct pj_opaque { + struct isea_dgg dgg; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + struct isea_pt out; + struct isea_geo in; + + in.lon = lp.lam; + in.lat = lp.phi; + + out = isea_forward(&Q->dgg, &in); + + xy.x = out.x; + xy.y = out.y; + + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(isea) { + char *opt; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + P->fwd = s_forward; + isea_grid_init(&Q->dgg); + + Q->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(&Q->dgg); + } else if (!strcmp(opt, "pole")) { + isea_orient_pole(&Q->dgg); + } else { + E_ERROR(-34); + } + } + + if (pj_param(P->ctx,P->params, "tazi").i) { + Q->dgg.o_az = pj_param(P->ctx,P->params, "razi").f; + } + + if (pj_param(P->ctx,P->params, "tlon_0").i) { + Q->dgg.o_lon = pj_param(P->ctx,P->params, "rlon_0").f; + } + + if (pj_param(P->ctx,P->params, "tlat_0").i) { + Q->dgg.o_lat = pj_param(P->ctx,P->params, "rlat_0").f; + } + + if (pj_param(P->ctx,P->params, "taperture").i) { + Q->dgg.aperture = pj_param(P->ctx,P->params, "iaperture").i; + } + + if (pj_param(P->ctx,P->params, "tresolution").i) { + Q->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")) { + Q->dgg.output = ISEA_PLANE; + } else if (!strcmp(opt, "di")) { + Q->dgg.output = ISEA_Q2DI; + } + else if (!strcmp(opt, "dd")) { + Q->dgg.output = ISEA_Q2DD; + } + else if (!strcmp(opt, "hex")) { + Q->dgg.output = ISEA_HEX; + } + else { + /* TODO verify error code. Possibly eliminate magic */ + E_ERROR(-34); + } + } + + if (pj_param(P->ctx,P->params, "trescale").i) { + Q->dgg.radius = ISEA_SCALE; + } + + if (pj_param(P->ctx,P->params, "tresolution").i) { + Q->dgg.resolution = pj_param(P->ctx,P->params, "iresolution").i; + } else { + Q->dgg.resolution = 4; + } + + if (pj_param(P->ctx,P->params, "taperture").i) { + Q->dgg.aperture = pj_param(P->ctx,P->params, "iaperture").i; + } else { + Q->dgg.aperture = 3; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_isea_selftest (void) {return 0;} +#else + +int pj_isea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=isea +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {-1097074.9480224741, 3442909.3090371834}, + {-1097074.9482647954, 3233611.7285857084}, + {-1575486.3536415542, 3442168.3420281881}, + {-1575486.353880283, 3234352.6955947056}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_krovak.c b/proj4/src/PJ_krovak.c new file mode 100644 index 000000000000..136978a0cac4 --- /dev/null +++ b/proj4/src/PJ_krovak.c @@ -0,0 +1,276 @@ + /* + * Project: PROJ.4 + * Purpose: Implementation of the krovak (Krovak) projection. + * Definition: http://www.ihsenergy.com/epsg/guid7.html#1.4.3 + * Author: Thomas Flemming, tf@ttqv.com + * + ****************************************************************************** + * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ****************************************************************************** + * A description of the (forward) projection is found in: + * + * Bohuslav Veverka, + * + * KROVAK’S PROJECTION AND ITS USE FOR THE + * CZECH REPUBLIC AND THE SLOVAK REPUBLIC, + * + * 50 years of the Research Institute of + * and the Slovak Republic Geodesy, Topography and Cartography + * + * which can be found via the Wayback Machine: + * + * https://web.archive.org/web/20150216143806/https://www.vugtk.cz/odis/sborniky/sb2005/Sbornik_50_let_VUGTK/Part_1-Scientific_Contribution/16-Veverka.pdf + * + * Further info, including the inverse projection, is given by EPSG: + * + * Guidance Note 7 part 2 + * Coordinate Conversions and Transformations including Formulas + * + * http://www.iogp.org/pubs/373-07-2.pdf + * + * Variable names in this file mostly follows what is used in the + * paper by Veverka. + * + * According to EPSG the full Krovak projection method should have + * the following parameters. Within PROJ.4 the azimuth, and pseudo + * standard parallel are hardcoded in the algorithm and can't be + * altered from outside. The others all have defaults to match the + * common usage with Krovak projection. + * + * lat_0 = latitude of centre of the projection + * + * lon_0 = longitude of centre of the projection + * + * ** = azimuth (true) of the centre line passing through the + * centre of the projection + * + * ** = latitude of pseudo standard parallel + * + * k = scale factor on the pseudo standard parallel + * + * x_0 = False Easting of the centre of the projection at the + * apex of the cone + * + * y_0 = False Northing of the centre of the projection at + * the apex of the cone + * + *****************************************************************************/ + + +#define PJ_LIB__ +#include + +PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; + +#define EPS 1e-15 +#define S45 0.785398163397448 /* 45 deg */ +#define S90 1.570796326794896 /* 90 deg */ +#define UQ 1.04216856380474 /* DU(2, 59, 42, 42.69689) */ +#define S0 1.37008346281555 /* Latitude of pseudo standard parallel 78deg 30'00" N */ + +struct pj_opaque { + double alpha; + double k; + double n; + double rho0; + double ad; + int czech; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + struct pj_opaque *Q = P->opaque; + XY xy = {0.0,0.0}; + + double gfi, u, deltav, s, d, eps, rho; + + gfi = pow ( (1. + P->e * sin(lp.phi)) / (1. - P->e * sin(lp.phi)), Q->alpha * P->e / 2.); + + u = 2. * (atan(Q->k * pow( tan(lp.phi / 2. + S45), Q->alpha) / gfi)-S45); + deltav = -lp.lam * Q->alpha; + + s = asin(cos(Q->ad) * sin(u) + sin(Q->ad) * cos(u) * cos(deltav)); + d = asin(cos(u) * sin(deltav) / cos(s)); + + eps = Q->n * d; + rho = Q->rho0 * pow(tan(S0 / 2. + S45) , Q->n) / pow(tan(s / 2. + S45) , Q->n); + + xy.y = rho * cos(eps); + xy.x = rho * sin(eps); + + xy.y *= Q->czech; + xy.x *= Q->czech; + + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + struct pj_opaque *Q = P->opaque; + LP lp = {0.0,0.0}; + + double u, deltav, s, d, eps, rho, fi1, xy0; + int ok; + + xy0 = xy.x; + xy.x = xy.y; + xy.y = xy0; + + xy.x *= Q->czech; + xy.y *= Q->czech; + + rho = sqrt(xy.x * xy.x + xy.y * xy.y); + eps = atan2(xy.y, xy.x); + + d = eps / sin(S0); + s = 2. * (atan( pow(Q->rho0 / rho, 1. / Q->n) * tan(S0 / 2. + S45)) - S45); + + u = asin(cos(Q->ad) * sin(s) - sin(Q->ad) * cos(s) * cos(d)); + deltav = asin(cos(s) * sin(d) / cos(u)); + + lp.lam = P->lam0 - deltav / Q->alpha; + + /* ITERATION FOR lp.phi */ + fi1 = u; + + ok = 0; + do { + lp.phi = 2. * ( atan( pow( Q->k, -1. / Q->alpha) * + pow( tan(u / 2. + S45) , 1. / Q->alpha) * + pow( (1. + P->e * sin(fi1)) / (1. - P->e * sin(fi1)) , P->e / 2.) + ) - S45); + + if (fabs(fi1 - lp.phi) < EPS) ok=1; + fi1 = lp.phi; + } while (ok==0); + + lp.lam -= P->lam0; + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc(P); + + pj_dealloc(P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(krovak) { + double u0, n0, g; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + /* we want Bessel as fixed ellipsoid */ + P->a = 6377397.155; + P->e = sqrt(P->es = 0.006674372230614); + + /* if latitude of projection center is not set, use 49d30'N */ + 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->ctx, P->params, "tlon_0").i) + P->lam0 = 0.7417649320975901 - 0.308341501185665; + + /* if scale not set default to 0.9999 */ + if (!pj_param(P->ctx, P->params, "tk").i) + P->k0 = 0.9999; + + Q->czech = 1; + if( !pj_param(P->ctx, P->params, "tczech").i ) + Q->czech = -1; + + /* Set up shared parameters between forward and inverse */ + Q->alpha = sqrt(1. + (P->es * pow(cos(P->phi0), 4)) / (1. - P->es)); + u0 = asin(sin(P->phi0) / Q->alpha); + g = pow( (1. + P->e * sin(P->phi0)) / (1. - P->e * sin(P->phi0)) , Q->alpha * P->e / 2. ); + Q->k = tan( u0 / 2. + S45) / pow (tan(P->phi0 / 2. + S45) , Q->alpha) * g; + n0 = sqrt(1. - P->es) / (1. - P->es * pow(sin(P->phi0), 2)); + Q->n = sin(S0); + Q->rho0 = P->k0 * n0 / tan(S0); + Q->ad = S90 - UQ; + + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_krovak_selftest (void) {return 0;} +#else + +int pj_krovak_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=krovak +ellps=GRS80"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {-3196535.2325636409, -6617878.8675514441}, + {-3260035.4405521089, -6898873.6148780314}, + {-3756305.3288691747, -6478142.5615715114}, + {-3831703.6585019818, -6759107.1701553948}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {24.836218918719162, 59.758403933233858}, + {24.836315484509566, 59.756888425730189}, + {24.830447747947495, 59.758403933233858}, + {24.830351182157091, 59.756888425730189}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_labrd.c b/proj4/src/PJ_labrd.c new file mode 100644 index 000000000000..d0fad6277505 --- /dev/null +++ b/proj4/src/PJ_labrd.c @@ -0,0 +1,186 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(labrd, "Laborde") "\n\tCyl, Sph\n\tSpecial for Madagascar"; +#define EPS 1.e-10 + +struct pj_opaque { + double kRg, p0s, A, C, Ca, Cb, Cc, Cd; \ + int rot; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double V1, V2, ps, sinps, cosps, sinps2, cosps2; + double I1, I2, I3, I4, I5, I6, x2, y2, t; + + V1 = Q->A * log( tan(M_FORTPI + .5 * lp.phi) ); + t = P->e * sin(lp.phi); + V2 = .5 * P->e * Q->A * log ((1. + t)/(1. - t)); + ps = 2. * (atan(exp(V1 - V2 + Q->C)) - M_FORTPI); + I1 = ps - Q->p0s; + cosps = cos(ps); cosps2 = cosps * cosps; + sinps = sin(ps); sinps2 = sinps * sinps; + I4 = Q->A * cosps; + I2 = .5 * Q->A * I4 * sinps; + I3 = I2 * Q->A * Q->A * (5. * cosps2 - sinps2) / 12.; + I6 = I4 * Q->A * Q->A; + I5 = I6 * (cosps2 - sinps2) / 6.; + I6 *= Q->A * Q->A * + (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.; + t = lp.lam * lp.lam; + xy.x = Q->kRg * lp.lam * (I4 + t * (I5 + t * I6)); + xy.y = Q->kRg * (I1 + t * (I2 + t * I3)); + x2 = xy.x * xy.x; + y2 = xy.y * xy.y; + V1 = 3. * xy.x * y2 - xy.x * x2; + V2 = xy.y * y2 - 3. * x2 * xy.y; + xy.x += Q->Ca * V1 + Q->Cb * V2; + xy.y += Q->Ca * V2 - Q->Cb * V1; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s; + double I7, I8, I9, I10, I11, d, Re; + int i; + + x2 = xy.x * xy.x; + y2 = xy.y * xy.y; + V1 = 3. * xy.x * y2 - xy.x * x2; + V2 = xy.y * y2 - 3. * x2 * xy.y; + V3 = xy.x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 )); + V4 = xy.y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 )); + xy.x += - Q->Ca * V1 - Q->Cb * V2 + Q->Cc * V3 + Q->Cd * V4; + xy.y += Q->Cb * V1 - Q->Ca * V2 - Q->Cd * V3 + Q->Cc * V4; + ps = Q->p0s + xy.y / Q->kRg; + pe = ps + P->phi0 - Q->p0s; + for ( i = 20; i; --i) { + V1 = Q->A * log(tan(M_FORTPI + .5 * pe)); + tpe = P->e * sin(pe); + V2 = .5 * P->e * Q->A * log((1. + tpe)/(1. - tpe)); + t = ps - 2. * (atan(exp(V1 - V2 + Q->C)) - M_FORTPI); + pe += t; + if (fabs(t) < EPS) + break; + } + + t = P->e * sin(pe); + t = 1. - t * t; + Re = P->one_es / ( t * sqrt(t) ); + t = tan(ps); + t2 = t * t; + s = Q->kRg * Q->kRg; + d = Re * P->k0 * Q->kRg; + I7 = t / (2. * d); + I8 = t * (5. + 3. * t2) / (24. * d * s); + d = cos(ps) * Q->kRg * Q->A; + I9 = 1. / d; + d *= s; + I10 = (1. + 2. * t2) / (6. * d); + I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s); + x2 = xy.x * xy.x; + lp.phi = pe + x2 * (-I7 + I8 * x2); + lp.lam = xy.x * (I9 + x2 * (-I10 + x2 * I11)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(labrd) { + double Az, sinp, R, N, t; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->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); + R = P->one_es * N / t; + Q->kRg = P->k0 * sqrt( N * R ); + Q->p0s = atan( sqrt(R / N) * tan(P->phi0) ); + Q->A = sinp / sin(Q->p0s); + t = P->e * sinp; + Q->C = .5 * P->e * Q->A * log((1. + t)/(1. - t)) + + - Q->A * log( tan(M_FORTPI + .5 * P->phi0)) + + log( tan(M_FORTPI + .5 * Q->p0s)); + t = Az + Az; + Q->Ca = (1. - cos(t)) * ( Q->Cb = 1. / (12. * Q->kRg * Q->kRg) ); + Q->Cb *= sin(t); + Q->Cc = 3. * (Q->Ca * Q->Ca - Q->Cb * Q->Cb); + Q->Cd = 6. * Q->Ca * Q->Cb; + + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_labrd_selftest (void) {return 0;} +#else + +int pj_labrd_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=labrd +ellps=GRS80 +lon_0=0.5 +lat_0=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 166973.166090228391, -110536.912730266107}, + { 166973.168287157256, -331761.993650884193}, + {-278345.500519976194, -110469.032642031714}, + {-278345.504185269645, -331829.870790275279}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.501797719349373672, 2.00090435742047923}, + {0.501797717380853658, 1.99909564058898681}, + {0.498202280650626328, 2.00090435742047923}, + {0.498202282619146342, 1.99909564058898681}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_laea.c b/proj4/src/PJ_laea.c new file mode 100644 index 000000000000..c9aef5c3427b --- /dev/null +++ b/proj4/src/PJ_laea.c @@ -0,0 +1,338 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") "\n\tAzi, Sph&Ell"; + +struct pj_opaque { + double sinb1; + double cosb1; + double xmf; + double ymf; + double mmf; + double qp; + double dd; + double rq; + double *apa; + int mode; +}; + +#define EPS10 1.e-10 +#define NITER 20 +#define CONV 1.e-10 +#define N_POLE 0 +#define S_POLE 1 +#define EQUIT 2 +#define OBLIQ 3 + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0; + + coslam = cos(lp.lam); + sinlam = sin(lp.lam); + sinphi = sin(lp.phi); + q = pj_qsfn(sinphi, P->e, P->one_es); + + if (Q->mode == OBLIQ || Q->mode == EQUIT) { + sinb = q / Q->qp; + cosb = sqrt(1. - sinb * sinb); + } + + switch (Q->mode) { + case OBLIQ: + b = 1. + Q->sinb1 * sinb + Q->cosb1 * cosb * coslam; + break; + case EQUIT: + b = 1. + cosb * coslam; + break; + case N_POLE: + b = M_HALFPI + lp.phi; + q = Q->qp - q; + break; + case S_POLE: + b = lp.phi - M_HALFPI; + q = Q->qp + q; + break; + } + if (fabs(b) < EPS10) F_ERROR; + + switch (Q->mode) { + case OBLIQ: + b = sqrt(2. / b); + xy.y = Q->ymf * b * (Q->cosb1 * sinb - Q->sinb1 * cosb * coslam); + goto eqcon; + break; + case EQUIT: + b = sqrt(2. / (1. + cosb * coslam)); + xy.y = b * sinb * Q->ymf; +eqcon: + xy.x = Q->xmf * b * cosb * sinlam; + break; + case N_POLE: + case S_POLE: + if (q >= 0.) { + b = sqrt(q); + xy.x = b * sinlam; + xy.y = coslam * (Q->mode == S_POLE ? b : -b); + } else + xy.x = xy.y = 0.; + break; + } + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, cosphi, sinphi; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + switch (Q->mode) { + case EQUIT: + xy.y = 1. + cosphi * coslam; + goto oblcon; + case OBLIQ: + xy.y = 1. + Q->sinb1 * sinphi + Q->cosb1 * cosphi * coslam; +oblcon: + if (xy.y <= EPS10) F_ERROR; + xy.y = sqrt(2. / xy.y); + xy.x = xy.y * cosphi * sin(lp.lam); + xy.y *= Q->mode == EQUIT ? sinphi : + Q->cosb1 * sinphi - Q->sinb1 * cosphi * coslam; + break; + case N_POLE: + coslam = -coslam; + case S_POLE: + if (fabs(lp.phi + P->phi0) < EPS10) F_ERROR; + xy.y = M_FORTPI - lp.phi * .5; + xy.y = 2. * (Q->mode == S_POLE ? cos(xy.y) : sin(xy.y)); + xy.x = xy.y * sin(lp.lam); + xy.y *= coslam; + break; + } + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cCe, sCe, q, rho, ab=0.0; + + switch (Q->mode) { + case EQUIT: + case OBLIQ: + xy.x /= Q->dd; + xy.y *= Q->dd; + rho = hypot(xy.x, xy.y); + if (rho < EPS10) { + lp.lam = 0.; + lp.phi = P->phi0; + return lp; + } + sCe = 2. * asin(.5 * rho / Q->rq); + cCe = cos(sCe); + sCe = sin(sCe); + xy.x *= sCe; + if (Q->mode == OBLIQ) { + ab = cCe * Q->sinb1 + xy.y * sCe * Q->cosb1 / rho; + xy.y = rho * Q->cosb1 * cCe - xy.y * Q->sinb1 * sCe; + } else { + ab = xy.y * sCe / rho; + xy.y = rho * cCe; + } + break; + case N_POLE: + xy.y = -xy.y; + case S_POLE: + q = (xy.x * xy.x + xy.y * xy.y); + if (!q) { + lp.lam = 0.; + lp.phi = P->phi0; + return (lp); + } + ab = 1. - q / Q->qp; + if (Q->mode == S_POLE) + ab = - ab; + break; + } + lp.lam = atan2(xy.x, xy.y); + lp.phi = pj_authlat(asin(ab), Q->apa); + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosz=0.0, rh, sinz=0.0; + + rh = hypot(xy.x, xy.y); + if ((lp.phi = rh * .5 ) > 1.) I_ERROR; + lp.phi = 2. * asin(lp.phi); + if (Q->mode == OBLIQ || Q->mode == EQUIT) { + sinz = sin(lp.phi); + cosz = cos(lp.phi); + } + switch (Q->mode) { + case EQUIT: + lp.phi = fabs(rh) <= EPS10 ? 0. : asin(xy.y * sinz / rh); + xy.x *= sinz; + xy.y = cosz * rh; + break; + case OBLIQ: + lp.phi = fabs(rh) <= EPS10 ? P->phi0 : + asin(cosz * Q->sinb1 + xy.y * sinz * Q->cosb1 / rh); + xy.x *= sinz * Q->cosb1; + xy.y = (cosz - sin(lp.phi) * Q->sinb1) * rh; + break; + case N_POLE: + xy.y = -xy.y; + lp.phi = M_HALFPI - lp.phi; + break; + case S_POLE: + lp.phi -= M_HALFPI; + break; + } + lp.lam = (xy.y == 0. && (Q->mode == EQUIT || Q->mode == OBLIQ)) ? + 0. : atan2(xy.x, xy.y); + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque->apa); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(laea) { + double t; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + t = fabs(P->phi0); + if (fabs(t - M_HALFPI) < EPS10) + Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; + else if (fabs(t) < EPS10) + Q->mode = EQUIT; + else + Q->mode = OBLIQ; + if (P->es) { + double sinphi; + + P->e = sqrt(P->es); + Q->qp = pj_qsfn(1., P->e, P->one_es); + Q->mmf = .5 / (1. - P->es); + Q->apa = pj_authset(P->es); + switch (Q->mode) { + case N_POLE: + case S_POLE: + Q->dd = 1.; + break; + case EQUIT: + Q->dd = 1. / (Q->rq = sqrt(.5 * Q->qp)); + Q->xmf = 1.; + Q->ymf = .5 * Q->qp; + break; + case OBLIQ: + Q->rq = sqrt(.5 * Q->qp); + sinphi = sin(P->phi0); + Q->sinb1 = pj_qsfn(sinphi, P->e, P->one_es) / Q->qp; + Q->cosb1 = sqrt(1. - Q->sinb1 * Q->sinb1); + Q->dd = cos(P->phi0) / (sqrt(1. - P->es * sinphi * sinphi) * + Q->rq * Q->cosb1); + Q->ymf = (Q->xmf = Q->rq) / Q->dd; + Q->xmf *= Q->dd; + break; + } + P->inv = e_inverse; + P->fwd = e_forward; + } else { + if (Q->mode == OBLIQ) { + Q->sinb1 = sin(P->phi0); + Q->cosb1 = cos(P->phi0); + } + P->inv = s_inverse; + P->fwd = s_forward; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_laea_selftest (void) {return 0;} +#else + +int pj_laea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=laea +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=laea +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222602.471450095181, 110589.82722441027}, + { 222602.471450095181, -110589.827224408786}, + {-222602.471450095181, 110589.82722441027}, + {-222602.471450095181, -110589.827224408786}, + }; + + XY s_fwd_expect[] = { + { 223365.281370124663, 111716.668072915665}, + { 223365.281370124663, -111716.668072915665}, + {-223365.281370124663, 111716.668072915665}, + {-223365.281370124663, -111716.668072915665}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179663056847900867, 0.000904369475966495845}, + { 0.00179663056847900867, -0.000904369475966495845}, + {-0.00179663056847900867, 0.000904369475966495845}, + {-0.00179663056847900867, -0.000904369475966495845}, + }; + + LP s_inv_expect[] = { + { 0.00179049311002060264, 0.000895246554791735271}, + { 0.00179049311002060264, -0.000895246554791735271}, + {-0.00179049311002060264, 0.000895246554791735271}, + {-0.00179049311002060264, -0.000895246554791735271}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_lagrng.c b/proj4/src/PJ_lagrng.c new file mode 100644 index 000000000000..142c28ab9ef4 --- /dev/null +++ b/proj4/src/PJ_lagrng.c @@ -0,0 +1,103 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(lagrng, "Lagrange") "\n\tMisc Sph, no inv.\n\tW="; + +#define TOL 1e-10 + +struct pj_opaque { + double a1; + double hrw; + double rw; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double v, c; + + if (fabs(fabs(lp.phi) - M_HALFPI) < TOL) { + xy.x = 0; + xy.y = lp.phi < 0 ? -2. : 2.; + } else { + lp.phi = sin(lp.phi); + v = Q->a1 * pow((1. + lp.phi)/(1. - lp.phi), Q->hrw); + if ((c = 0.5 * (v + 1./v) + cos(lp.lam *= Q->rw)) < TOL) + F_ERROR; + xy.x = 2. * sin(lp.lam) / c; + xy.y = (v - 1./v) / c; + } + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(lagrng) { + double phi1; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->rw = pj_param(P->ctx, P->params, "dW").f; + if (Q->rw <= 0) E_ERROR(-27); + + Q->rw = 1. / Q->rw; + Q->hrw = 0.5 * Q->rw; + phi1 = sin(pj_param(P->ctx, P->params, "rlat_1").f); + if (fabs(fabs(phi1) - 1.) < TOL) E_ERROR(-22); + + Q->a1 = pow((1. - phi1)/(1. + phi1), Q->hrw); + + P->es = 0.; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_lagrng_selftest (void) {return 0;} +#else + +int pj_lagrng_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=lagrng +a=6400000 +W=2 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 111703.37591722561, 27929.8319080333386}, + { 111699.122088816002, -83784.1780133577704}, + {-111703.37591722561, 27929.8319080333386}, + {-111699.122088816002, -83784.1780133577704}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_larr.c b/proj4/src/PJ_larr.c new file mode 100644 index 000000000000..dba2534c1619 --- /dev/null +++ b/proj4/src/PJ_larr.c @@ -0,0 +1,70 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv."; + +#define SIXTH .16666666666666666 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = 0.5 * lp.lam * (1. + sqrt(cos(lp.phi))); + xy.y = lp.phi / (cos(0.5 * lp.phi) * cos(SIXTH * lp.lam)); + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(larr) { + + P->es = 0; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_larr_selftest (void) {return 0;} +#else + +int pj_larr_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=larr +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223393.637624200899, 111707.215961255497}, + {223393.637624200899, -111707.215961255497}, + {-223393.637624200899, 111707.215961255497}, + {-223393.637624200899, -111707.215961255497}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_lask.c b/proj4/src/PJ_lask.c new file mode 100644 index 000000000000..9aa962065674 --- /dev/null +++ b/proj4/src/PJ_lask.c @@ -0,0 +1,81 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv."; + +#define a10 0.975534 +#define a12 -0.119161 +#define a32 -0.0143059 +#define a14 -0.0547009 +#define b01 1.00384 +#define b21 0.0802894 +#define b03 0.0998909 +#define b41 0.000199025 +#define b23 -0.0285500 +#define b05 -0.0491032 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double l2, p2; + (void) P; + + l2 = lp.lam * lp.lam; + p2 = lp.phi * lp.phi; + xy.x = lp.lam * (a10 + p2 * (a12 + l2 * a32 + p2 * a14)); + xy.y = lp.phi * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) + + p2 * (b03 + p2 * b05)); + return xy; +} + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(lask) { + + P->fwd = s_forward; + P->es = 0.; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_lask_selftest (void) {return 0;} +#else + +int pj_lask_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=lask +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 217928.275907355128, 112144.32922014239}, + { 217928.275907355128, -112144.32922014239}, + {-217928.275907355128, 112144.32922014239}, + {-217928.275907355128, -112144.32922014239}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_lcc.c b/proj4/src/PJ_lcc.c new file mode 100644 index 000000000000..1c05a7febaef --- /dev/null +++ b/proj4/src/PJ_lcc.c @@ -0,0 +1,196 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(lcc, "Lambert Conformal Conic") + "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0"; + +# define EPS10 1.e-10 + +struct pj_opaque { + double phi1; + double phi2; + double n; + double rho0; + double c; + int ellips; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rho; + + if (fabs(fabs(lp.phi) - M_HALFPI) < EPS10) { + if ((lp.phi * Q->n) <= 0.) F_ERROR; + rho = 0.; + } else { + rho = Q->c * (Q->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), + P->e), Q->n) : pow(tan(M_FORTPI + .5 * lp.phi), -Q->n)); + } + lp.lam *= Q->n; + xy.x = P->k0 * (rho * sin( lp.lam) ); + xy.y = P->k0 * (Q->rho0 - rho * cos(lp.lam) ); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rho; + + xy.x /= P->k0; + xy.y /= P->k0; + + xy.y = Q->rho0 - xy.y; + rho = hypot(xy.x, xy.y); + if (rho != 0.0) { + if (Q->n < 0.) { + rho = -rho; + xy.x = -xy.x; + xy.y = -xy.y; + } + if (Q->ellips) { + lp.phi = pj_phi2(P->ctx, pow(rho / Q->c, 1./Q->n), P->e); + if (lp.phi == HUGE_VAL) + I_ERROR; + } else + lp.phi = 2. * atan(pow(Q->c / rho, 1./Q->n)) - M_HALFPI; + lp.lam = atan2(xy.x, xy.y) / Q->n; + } else { + lp.lam = 0.; + lp.phi = Q->n > 0. ? M_HALFPI : -M_HALFPI; + } + return lp; +} + +static void special(LP lp, PJ *P, struct FACTORS *fac) { + struct pj_opaque *Q = P->opaque; + double rho; + if (fabs(fabs(lp.phi) - M_HALFPI) < EPS10) { + if ((lp.phi * Q->n) <= 0.) return; + rho = 0.; + } else + rho = Q->c * (Q->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), + P->e), Q->n) : pow(tan(M_FORTPI + .5 * lp.phi), -Q->n)); + fac->code |= IS_ANAL_HK + IS_ANAL_CONV; + fac->k = fac->h = P->k0 * Q->n * rho / + pj_msfn(sin(lp.phi), cos(lp.phi), P->es); + fac->conv = - Q->n * lp.lam; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(lcc) { + double cosphi, sinphi; + int secant; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + if (pj_param(P->ctx, P->params, "tlat_2").i) + Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; + else { + Q->phi2 = Q->phi1; + if (!pj_param(P->ctx, P->params, "tlat_0").i) + P->phi0 = Q->phi1; + } + if (fabs(Q->phi1 + Q->phi2) < EPS10) E_ERROR(-21); + Q->n = sinphi = sin(Q->phi1); + cosphi = cos(Q->phi1); + secant = fabs(Q->phi1 - Q->phi2) >= EPS10; + if( (Q->ellips = (P->es != 0.)) ) { + double ml1, m1; + + P->e = sqrt(P->es); + m1 = pj_msfn(sinphi, cosphi, P->es); + ml1 = pj_tsfn(Q->phi1, sinphi, P->e); + if (secant) { /* secant cone */ + sinphi = sin(Q->phi2); + Q->n = log(m1 / pj_msfn(sinphi, cos(Q->phi2), P->es)); + Q->n /= log(ml1 / pj_tsfn(Q->phi2, sinphi, P->e)); + } + Q->c = (Q->rho0 = m1 * pow(ml1, -Q->n) / Q->n); + Q->rho0 *= (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. : + pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), Q->n); + } else { + if (secant) + Q->n = log(cosphi / cos(Q->phi2)) / + log(tan(M_FORTPI + .5 * Q->phi2) / + tan(M_FORTPI + .5 * Q->phi1)); + Q->c = cosphi * pow(tan(M_FORTPI + .5 * Q->phi1), Q->n) / Q->n; + Q->rho0 = (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. : + Q->c * pow(tan(M_FORTPI + .5 * P->phi0), -Q->n); + } + + P->inv = e_inverse; + P->fwd = e_forward; + P->spc = special; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_lcc_selftest (void) {return 0;} +#else + +int pj_lcc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=lcc +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222588.439735968423, 110660.533870799671}, + { 222756.879700278747, -110532.797660827026}, + {-222588.439735968423, 110660.533870799671}, + {-222756.879700278747, -110532.797660827026}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179635940600536667, 0.000904232207322381741}, + { 0.00179635817735249777, -0.000904233135128348995}, + {-0.00179635940600536667, 0.000904232207322381741}, + {-0.00179635817735249777, -0.000904233135128348995}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_lcca.c b/proj4/src/PJ_lcca.c new file mode 100644 index 000000000000..4a586308caff --- /dev/null +++ b/proj4/src/PJ_lcca.c @@ -0,0 +1,156 @@ +/* PROJ.4 Cartographic Projection System +*/ +#define PJ_LIB__ +#include + +PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") + "\n\tConic, Sph&Ell\n\tlat_0="; + +#define MAX_ITER 10 +#define DEL_TOL 1e-12 + +struct pj_opaque { + double *en; + double r0, l, M0; + double C; +}; + + +static double fS(double S, double C) { /* func to compute dr */ + + return S * ( 1. + S * S * C); +} + + +static double fSp(double S, double C) { /* deriv of fs */ + + return 1. + 3.* S * S * C; +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double S, r, dr; + + S = pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), Q->en) - Q->M0; + dr = fS(S, Q->C); + r = Q->r0 - dr; + xy.x = P->k0 * (r * sin( lp.lam *= Q->l ) ); + xy.y = P->k0 * (Q->r0 - r * cos(lp.lam) ); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double theta, dr, S, dif; + int i; + + xy.x /= P->k0; + xy.y /= P->k0; + theta = atan2(xy.x , Q->r0 - xy.y); + dr = xy.y - xy.x * tan(0.5 * theta); + lp.lam = theta / Q->l; + S = dr; + for (i = MAX_ITER; i ; --i) { + S -= (dif = (fS(S, Q->C) - dr) / fSp(S, Q->C)); + if (fabs(dif) < DEL_TOL) break; + } + if (!i) I_ERROR + lp.phi = pj_inv_mlfn(P->ctx, S + Q->M0, P->es, Q->en); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(lcca) { + double s2p0, N0, R0, tan0; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + (Q->en = pj_enfn(P->es)); + if (!Q->en) E_ERROR_0; + if (!pj_param(P->ctx, P->params, "tlat_0").i) E_ERROR(50); + if (P->phi0 == 0.) E_ERROR(51); + Q->l = sin(P->phi0); + Q->M0 = pj_mlfn(P->phi0, Q->l, cos(P->phi0), Q->en); + s2p0 = Q->l * Q->l; + R0 = 1. / (1. - P->es * s2p0); + N0 = sqrt(R0); + R0 *= P->one_es * N0; + tan0 = tan(P->phi0); + Q->r0 = N0 / tan0; + Q->C = 1. / (6. * R0 * N0); + + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + + +#ifndef PJ_SELFTEST +int pj_lcca_selftest (void) {return 0;} +#else + +int pj_lcca_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=lcca +ellps=GRS80 +lat_0=1 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222605.285770237417, 67.8060072715846616}, + { 222740.037637936533, -221125.539829601563}, + {-222605.285770237417, 67.8060072715846616}, + {-222740.037637936533, -221125.539829601563}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179690290525662526, 1.00090436621350798}, + { 0.00179690192174008037, 0.999095632791497268}, + {-0.00179690290525662526, 1.00090436621350798}, + {-0.00179690192174008037, 0.999095632791497268}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_loxim.c b/proj4/src/PJ_loxim.c new file mode 100644 index 000000000000..57f07048414a --- /dev/null +++ b/proj4/src/PJ_loxim.c @@ -0,0 +1,130 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(loxim, "Loximuthal") "\n\tPCyl Sph"; + +#define EPS 1e-8 + +struct pj_opaque { + double phi1; + double cosphi1; + double tanphi1; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + xy.y = lp.phi - Q->phi1; + if (fabs(xy.y) < EPS) + xy.x = lp.lam * Q->cosphi1; + else { + xy.x = M_FORTPI + 0.5 * lp.phi; + if (fabs(xy.x) < EPS || fabs(fabs(xy.x) - M_HALFPI) < EPS) + xy.x = 0.; + else + xy.x = lp.lam * xy.y / log( tan(xy.x) / Q->tanphi1 ); + } + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + lp.phi = xy.y + Q->phi1; + if (fabs(xy.y) < EPS) { + lp.lam = xy.x / Q->cosphi1; + } else { + lp.lam = M_FORTPI + 0.5 * lp.phi; + if (fabs(lp.lam) < EPS || fabs(fabs(lp.lam) - M_HALFPI) < EPS) + lp.lam = 0.; + else + lp.lam = xy.x * log( tan(lp.lam) / Q->tanphi1 ) / xy.y ; + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(loxim) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + Q->cosphi1 = cos(Q->phi1); + if (Q->cosphi1 < EPS) + E_ERROR(-22); + + Q->tanphi1 = tan(M_FORTPI + 0.5 * Q->phi1); + + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_loxim_selftest (void) {return 0;} +#else + +int pj_loxim_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=loxim +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223382.295791338867, 55850.5360638185448}, + { 223393.637462243292, -167551.608191455656}, + {-223382.295791338867, 55850.5360638185448}, + {-223393.637462243292, -167551.608191455656}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179056141104335601, 0.500895246554891926}, + { 0.00179056116683692576, 0.499104753445108074}, + {-0.00179056141104335601, 0.500895246554891926}, + {-0.00179056116683692576, 0.499104753445108074}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_lsat.c b/proj4/src/PJ_lsat.c new file mode 100644 index 000000000000..292a58270205 --- /dev/null +++ b/proj4/src/PJ_lsat.c @@ -0,0 +1,256 @@ +/* based upon Snyder and Linck, USGS-NMD */ +#define PJ_LIB__ +#include + +PROJ_HEAD(lsat, "Space oblique for LANDSAT") + "\n\tCyl, Sph&Ell\n\tlsat= path="; + +#define TOL 1e-7 + +struct pj_opaque { + double a2, a4, b, c1, c3; + double q, t, u, w, p22, sa, ca, xj, rlm, rlm2; +}; + +static void seraz0(double lam, double mult, PJ *P) { + struct pj_opaque *Q = P->opaque; + double sdsq, h, s, fc, sd, sq, d__1 = 0; + + lam *= DEG_TO_RAD; + sd = sin(lam); + sdsq = sd * sd; + s = Q->p22 * Q->sa * cos(lam) * sqrt((1. + Q->t * sdsq) + / ((1. + Q->w * sdsq) * (1. + Q->q * sdsq))); + + h = sqrt((1. + Q->q * sdsq) / (1. + Q->w * sdsq)) * ((1. + Q->w * sdsq) + / (d__1 * d__1) - Q->p22 * Q->ca); + + sq = sqrt(Q->xj * Q->xj + s * s); + fc = mult * (h * Q->xj - s * s) / sq; + Q->b += fc; + Q->a2 += fc * cos(lam + lam); + Q->a4 += fc * cos(lam * 4.); + fc = mult * s * (h + Q->xj) / sq; + Q->c1 += fc * cos(lam); + Q->c3 += fc * cos(lam * 3.); +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + int l, nn; + double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph; + double lamtp, cl, sd, sp, fac, sav, tanphi; + + if (lp.phi > M_HALFPI) + lp.phi = M_HALFPI; + else if (lp.phi < -M_HALFPI) + lp.phi = -M_HALFPI; + + lampp = lp.phi >= 0. ? M_HALFPI : M_PI_HALFPI; + tanphi = tan(lp.phi); + for (nn = 0;;) { + sav = lampp; + lamtp = lp.lam + Q->p22 * lampp; + cl = cos(lamtp); + if (fabs(cl) < TOL) + lamtp -= TOL; + fac = lampp - sin(lampp) * (cl < 0. ? -M_HALFPI : M_HALFPI); + for (l = 50; l; --l) { + lamt = lp.lam + Q->p22 * sav; + c = cos(lamt); + if (fabs(c) < TOL) + lamt -= TOL; + xlam = (P->one_es * tanphi * Q->sa + sin(lamt) * Q->ca) / c; + lamdp = atan(xlam) + fac; + if (fabs(fabs(sav) - fabs(lamdp)) < TOL) + break; + sav = lamdp; + } + if (!l || ++nn >= 3 || (lamdp > Q->rlm && lamdp < Q->rlm2)) + break; + if (lamdp <= Q->rlm) + lampp = M_TWOPI_HALFPI; + else if (lamdp >= Q->rlm2) + lampp = M_HALFPI; + } + if (l) { + sp = sin(lp.phi); + phidp = aasin(P->ctx,(P->one_es * Q->ca * sp - Q->sa * cos(lp.phi) * + sin(lamt)) / sqrt(1. - P->es * sp * sp)); + tanph = log(tan(M_FORTPI + .5 * phidp)); + sd = sin(lamdp); + sdsq = sd * sd; + s = Q->p22 * Q->sa * cos(lamdp) * sqrt((1. + Q->t * sdsq) + / ((1. + Q->w * sdsq) * (1. + Q->q * sdsq))); + d = sqrt(Q->xj * Q->xj + s * s); + xy.x = Q->b * lamdp + Q->a2 * sin(2. * lamdp) + Q->a4 * + sin(lamdp * 4.) - tanph * s / d; + xy.y = Q->c1 * sd + Q->c3 * sin(lamdp * 3.) + tanph * Q->xj / d; + } else + xy.x = xy.y = HUGE_VAL; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + int nn; + double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp; + + lamdp = xy.x / Q->b; + nn = 50; + do { + sav = lamdp; + sd = sin(lamdp); + sdsq = sd * sd; + s = Q->p22 * Q->sa * cos(lamdp) * sqrt((1. + Q->t * sdsq) + / ((1. + Q->w * sdsq) * (1. + Q->q * sdsq))); + lamdp = xy.x + xy.y * s / Q->xj - Q->a2 * sin( + 2. * lamdp) - Q->a4 * sin(lamdp * 4.) - s / Q->xj * ( + Q->c1 * sin(lamdp) + Q->c3 * sin(lamdp * 3.)); + lamdp /= Q->b; + } while (fabs(lamdp - sav) >= TOL && --nn); + sl = sin(lamdp); + fac = exp(sqrt(1. + s * s / Q->xj / Q->xj) * (xy.y - + Q->c1 * sl - Q->c3 * sin(lamdp * 3.))); + phidp = 2. * (atan(fac) - M_FORTPI); + dd = sl * sl; + if (fabs(cos(lamdp)) < TOL) + lamdp -= TOL; + spp = sin(phidp); + sppsq = spp * spp; + lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * + Q->ca - spp * Q->sa * sqrt((1. + Q->q * dd) * ( + 1. - sppsq) - sppsq * Q->u) / cos(lamdp)) / (1. - sppsq + * (1. + Q->u))); + sl = lamt >= 0. ? 1. : -1.; + scl = cos(lamdp) >= 0. ? 1. : -1; + lamt -= M_HALFPI * (1. - scl) * sl; + lp.lam = lamt - Q->p22 * lamdp; + if (fabs(Q->sa) < TOL) + lp.phi = aasin(P->ctx,spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); + else + lp.phi = atan((tan(lamdp) * cos(lamt) - Q->ca * sin(lamt)) / + (P->one_es * Q->sa)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(lsat) { + int land, path; + double lam, alf, esc, ess; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + land = pj_param(P->ctx, P->params, "ilsat").i; + if (land <= 0 || land > 5) E_ERROR(-28); + 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 - M_TWOPI / 251. * path; + Q->p22 = 103.2669323; + alf = DEG_TO_RAD * 99.092; + } else { + P->lam0 = DEG_TO_RAD * 129.3 - M_TWOPI / 233. * path; + Q->p22 = 98.8841202; + alf = DEG_TO_RAD * 98.2; + } + Q->p22 /= 1440.; + Q->sa = sin(alf); + Q->ca = cos(alf); + if (fabs(Q->ca) < 1e-9) + Q->ca = 1e-9; + esc = P->es * Q->ca * Q->ca; + ess = P->es * Q->sa * Q->sa; + Q->w = (1. - esc) * P->rone_es; + Q->w = Q->w * Q->w - 1.; + Q->q = ess * P->rone_es; + Q->t = ess * (2. - P->es) * P->rone_es * P->rone_es; + Q->u = esc * P->rone_es; + Q->xj = P->one_es * P->one_es * P->one_es; + Q->rlm = M_PI * (1. / 248. + .5161290322580645); + Q->rlm2 = Q->rlm + M_TWOPI; + Q->a2 = Q->a4 = Q->b = Q->c1 = Q->c3 = 0.; + seraz0(0., 1., P); + for (lam = 9.; lam <= 81.0001; lam += 18.) + seraz0(lam, 4., P); + for (lam = 18; lam <= 72.0001; lam += 18.) + seraz0(lam, 2., P); + seraz0(90., 1., P); + Q->a2 /= 30.; + Q->a4 /= 60.; + Q->b /= 30.; + Q->c1 /= 15.; + Q->c3 /= 45.; + + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_lsat_selftest (void) {return 0;} +#else + +int pj_lsat_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=lsat +ellps=GRS80 +lat_1=0.5 +lat_2=2 +lsat=1 +path=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {18241950.01455855, 9998256.83982293494}, + {18746856.2533194572, 10215761.669925211}, + {18565503.6836331636, 9085039.14672705345}, + {19019696.9020289108, 9247763.0394328218}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {126.000423834530011, 0.00172378224025701425}, + {126.002213738256714, 0.00188015467480917966}, + {126.000734468914601, -0.00188015467480917966}, + {126.002524372641304, -0.00172378224025701425}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_mbt_fps.c b/proj4/src/PJ_mbt_fps.c new file mode 100644 index 000000000000..5a3f3774a877 --- /dev/null +++ b/proj4/src/PJ_mbt_fps.c @@ -0,0 +1,112 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl., Sph."; + +#define MAX_ITER 10 +#define LOOP_TOL 1e-7 +#define C1 0.45503 +#define C2 1.36509 +#define C3 1.41546 +#define C_x 0.22248 +#define C_y 1.44492 +#define C1_2 0.33333333333333333333333333 + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double k, V, t; + int i; + (void) P; + + k = C3 * sin(lp.phi); + for (i = MAX_ITER; i ; --i) { + t = lp.phi / C2; + lp.phi -= V = (C1 * sin(t) + sin(lp.phi) - k) / + (C1_2 * cos(t) + cos(lp.phi)); + if (fabs(V) < LOOP_TOL) + break; + } + t = lp.phi / C2; + xy.x = C_x * lp.lam * (1. + 3. * cos(lp.phi)/cos(t) ); + xy.y = C_y * sin(t); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double t; + + 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(P->ctx,(C1 * sin(t) + sin(lp.phi)) / C3); + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(mbt_fps) { + + P->es = 0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_mbt_fps_selftest (void) {return 0;} +#else + +int pj_mbt_fps_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=mbt_fps +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 198798.176129849948, 125512.017254530627}, + { 198798.176129849948, -125512.017254530627}, + {-198798.176129849948, 125512.017254530627}, + {-198798.176129849948, -125512.017254530627}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00201197086238270742, 0.000796711850174446003}, + { 0.00201197086238270742, -0.000796711850174446003}, + {-0.00201197086238270742, 0.000796711850174446003}, + {-0.00201197086238270742, -0.000796711850174446003}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_mbtfpp.c b/proj4/src/PJ_mbtfpp.c new file mode 100644 index 000000000000..172be2369a1a --- /dev/null +++ b/proj4/src/PJ_mbtfpp.c @@ -0,0 +1,114 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl., Sph."; + +#define CS .95257934441568037152 +#define FXC .92582009977255146156 +#define FYC 3.40168025708304504493 +#define C23 .66666666666666666666 +#define C13 .33333333333333333333 +#define ONEEPS 1.0000001 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + lp.phi = asin(CS * sin(lp.phi)); + xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.); + xy.y = FYC * sin(C13 * lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + + lp.phi = xy.y / FYC; + if (fabs(lp.phi) >= 1.) { + if (fabs(lp.phi) > ONEEPS) + I_ERROR + else + lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; + } else + lp.phi = asin(lp.phi); + + lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) ); + if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) { + if (fabs(lp.phi) > ONEEPS) + I_ERROR + else + lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; + } else + lp.phi = asin(lp.phi); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(mbtfpp) { + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_mbtfpp_selftest (void) {return 0;} +#else + +int pj_mbtfpp_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=mbtfpp +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {206804.786929820373, 120649.762565792524}, + {206804.786929820373, -120649.762565792524}, + {-206804.786929820373, 120649.762565792524}, + {-206804.786929820373, -120649.762565792524}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.00193395359462902698, 0.00082883725477665357}, + {0.00193395359462902698, -0.00082883725477665357}, + {-0.00193395359462902698, 0.00082883725477665357}, + {-0.00193395359462902698, -0.00082883725477665357}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_mbtfpq.c b/proj4/src/PJ_mbtfpq.c new file mode 100644 index 000000000000..7a4367219eb5 --- /dev/null +++ b/proj4/src/PJ_mbtfpq.c @@ -0,0 +1,121 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl., Sph."; + +#define NITER 20 +#define EPS 1e-7 +#define ONETOL 1.000001 +#define C 1.70710678118654752440 +#define RC 0.58578643762690495119 +#define FYC 1.87475828462269495505 +#define RYC 0.53340209679417701685 +#define FXC 0.31245971410378249250 +#define RXC 3.20041258076506210122 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double th1, c; + int i; + (void) P; + + c = C * sin(lp.phi); + for (i = NITER; i; --i) { + lp.phi -= th1 = (sin(.5*lp.phi) + sin(lp.phi) - c) / + (.5*cos(.5*lp.phi) + cos(lp.phi)); + if (fabs(th1) < EPS) break; + } + xy.x = FXC * lp.lam * (1.0 + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); + xy.y = FYC * sin(0.5 * lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double t; + + lp.phi = RYC * xy.y; + if (fabs(lp.phi) > 1.) { + if (fabs(lp.phi) > ONETOL) I_ERROR + else if (lp.phi < 0.) { t = -1.; lp.phi = -M_PI; } + else { t = 1.; lp.phi = M_PI; } + } else + lp.phi = 2. * asin(t = lp.phi); + lp.lam = RXC * xy.x / (1. + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); + lp.phi = RC * (t + sin(lp.phi)); + if (fabs(lp.phi) > 1.) + if (fabs(lp.phi) > ONETOL) I_ERROR + else lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + else + lp.phi = asin(lp.phi); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(mbtfpq) { + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_mbtfpq_selftest (void) {return 0;} +#else + +int pj_mbtfpq_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=mbtfpq +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 209391.854738393013, 119161.040199054827}, + { 209391.854738393013, -119161.040199054827}, + {-209391.854738393013, 119161.040199054827}, + {-209391.854738393013, -119161.040199054827}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00191010555824111571, 0.000839185447792341723}, + { 0.00191010555824111571, -0.000839185447792341723}, + {-0.00191010555824111571, 0.000839185447792341723}, + {-0.00191010555824111571, -0.000839185447792341723}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_merc.c b/proj4/src/PJ_merc.c new file mode 100644 index 000000000000..4740e1ebd204 --- /dev/null +++ b/proj4/src/PJ_merc.c @@ -0,0 +1,134 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts="; + +#define EPS10 1.e-10 + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) + F_ERROR; + xy.x = P->k0 * lp.lam; + xy.y = - P->k0 * log(pj_tsfn(lp.phi, sin(lp.phi), P->e)); + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) + F_ERROR; + xy.x = P->k0 * lp.lam; + xy.y = P->k0 * log(tan(M_FORTPI + .5 * lp.phi)); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + 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; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + lp.phi = M_HALFPI - 2. * atan(exp(-xy.y / P->k0)); + lp.lam = xy.x / P->k0; + return lp; +} + + +static void freeup(PJ *P) { /* Destructor */ + pj_dealloc(P); +} + + +PJ *PROJECTION(merc) { + double phits=0.0; + int is_phits; + + 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 >= M_HALFPI) E_ERROR(-24); + } + + if (P->es) { /* ellipsoid */ + if (is_phits) + P->k0 = pj_msfn(sin(phits), cos(phits), P->es); + P->inv = e_inverse; + P->fwd = e_forward; + } + + else { /* sphere */ + if (is_phits) + P->k0 = cos(phits); + P->inv = s_inverse; + P->fwd = s_forward; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_merc_selftest (void) {return 0;} +#else + +int pj_merc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=merc +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=merc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222638.981586547132, 110579.965218249708}, + { 222638.981586547132, -110579.965218249112}, + {-222638.981586547132, 110579.965218249708}, + {-222638.981586547132, -110579.965218249112}, + }; + + XY s_fwd_expect[] = { + { 223402.144255274179, 111706.743574944077}, + { 223402.144255274179, -111706.743574944485}, + {-223402.144255274179, 111706.743574944077}, + {-223402.144255274179, -111706.743574944485}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179663056823904264, 0.00090436947522799056}, + { 0.00179663056823904264, -0.00090436947522799056}, + {-0.00179663056823904264, 0.00090436947522799056}, + {-0.00179663056823904264, -0.00090436947522799056}, + }; + + LP s_inv_expect[] = { + { 0.00179049310978382265, 0.000895246554845297135}, + { 0.00179049310978382265, -0.000895246554858019272}, + {-0.00179049310978382265, 0.000895246554845297135}, + {-0.00179049310978382265, -0.000895246554858019272}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_mill.c b/proj4/src/PJ_mill.c new file mode 100644 index 000000000000..1776341077b3 --- /dev/null +++ b/proj4/src/PJ_mill.c @@ -0,0 +1,92 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph"; + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = lp.lam; + xy.y = log(tan(M_FORTPI + lp.phi * .4)) * 1.25; + + return (xy); +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + (void) P; + + lp.lam = xy.x; + lp.phi = 2.5 * (atan(exp(.8 * xy.y)) - M_FORTPI); + + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(mill) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_mill_selftest (void) {return 0;} +#else + +int pj_mill_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=mill +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223402.144255274179, 111704.701754393827}, + { 223402.144255274179, -111704.701754396243}, + {-223402.144255274179, 111704.701754393827}, + {-223402.144255274179, -111704.701754396243}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179049310978382265, 0.000895246554873922024}, + { 0.00179049310978382265, -0.000895246554873922024}, + {-0.00179049310978382265, 0.000895246554873922024}, + {-0.00179049310978382265, -0.000895246554873922024}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_minimal.c b/proj4/src/PJ_minimal.c new file mode 100644 index 000000000000..1108c4fa9513 --- /dev/null +++ b/proj4/src/PJ_minimal.c @@ -0,0 +1,204 @@ +/*********************************************************************** + + A minimal example of a new proj.4 projection implementation + + ...and a verbose justification for some highly intrusive code + surgery + +************************************************************************ + +**The brief version:** + +In an attempt to make proj.4 code slightly more secure and much easier +to read and maintain, I'm trying to eliminate a few unfortunate design +decisions from the early days of proj.4 + +The work will be *very* intrusive, especially in the PJ_xxx segment of +the code tree, but great care has been taken to design a process that +can be implemented stepwise and localized, one projection at a time, +then finalized with a relatively small and concentrated work package. + +**The (very) long version:** + +Gerald I. Evenden's original design for the proj.4 projection system +is a beautiful example of software architecture, where a very limited +set of policy rules leads to a well defined hierarchical structure and +a high degree of both encapsulation and internal interoperability. + +In the proj.4 code, the policy rules are *enforced* by a system of +preprocessor macros for building the scaffolding for implementation +of a new projection. + +While this system of macros undeniably possesses the property of both +reducing repetitive code and enforcing policy, unfortunately it also +possesses two much less desirable properties: + +First, while enforcing policy, it also *hides* policy: The "beauty in +simplicity" of Gerald's design is hidden behind layers of macros, +whose architectural clarity do not match that of proj.4 in general. + +Second (and related), the macros make the source code look like +something only vaguely related to C, making it hard to read (an effect +that gets amplified to the tune of syntax highlighters getting confused +by the macros). + +While the policy rule enforcement macros can be eliminated in relatively +non-intrusive ways, a more fundamental flaw in the proj.4 use of macros +is found in the PJ_xxx.c files implementing the individual projections: +The use of internal redefinition of PJ, the fundamental proj data object, +through the use of the PROJ_PARMS__ macro, makes the sizeof (PJ) +fundamentally unknown to the calling pj_init function. + +This leads to code that is probably not in full conformance with the +C standard. + +It is also a memory management catastrophe waiting to happen. + +But first and foremost, it leads to some very clumsy initialization code, +where pj_init (the constructor function), needs to start the constsruction +process by asking the PJ_xxx function to do the memory allocation (because +pj_init does not know the size of the PROJ_PARMS-mangled PJ object being +instantiated). + +Then, after doing some initialization work, pj_init returns control to +PJ_xxx, asking it to finalize the initialization with the projection +specific parameters specified by the PROJ_PARMS__ macro. + +Behind the scenes, hidden by two layers of macros, what happens is even +worse, as a lot of the initialization code is duplicated in every PJ_xxx +file, rather than being centralized in the pj_init function. + +**Solution procedure:** + +Evidently, the way to eliminate this clumsyness will be to introduce an +opaque object, that is managed by tne individual PJ_xxx projection code, +and represented as a simple void-pointer in the PJ object. + +This can be done one projection code file at a time, working through the +code base as time permits (it will take at least a month). + +When a PJ_xxx file is on the surgical bench, it will also have its +ENTRYA/ENTRY0/ENTRY1/ENTRY2/ENDENTRY/etc. etc. macro-guts torn out and +replaced by the PROJECTION macro (introduced in projects.h). + +This leads to code that looks a lot more like real C, and hence is much +less confusing to both syntax higlighters and humans. It also leads +to code that, after all projections have been processed, with a final +sweep over the code base can be brought into the style of the code in +PJ_minimal.c + +In my humble opinion the result wil be a code base that is not only easier +to maintain, but also more welcoming to new contributors. + +And if proj is to expand its strong basis in projections into the fields +of geodetic transformations and general geometric geodesy, we will need +to be able to attract quite a few expert geodesist contributors. + +And since expert geodesists are not necessarily expert coders, a welcoming +code base is a real asset (to put the icing on the cake of the already +welcoming user- and developer community). + +Note that the entire process does not touch the algorithmic/mathematical +parts of the code at all - it is actuallly an attempt to make this part +stand out more clearly. + +--- + +The attached material is an attempt to show what happens if we remove +the layers of macros, and introduce a more centralized approach to +memory allocation and initialization. + +Please note, however, that the level of cantralization achieved here +is not yet fully supported by the proj.4 infrastructure: It is an +example, intended to show what can be achieved through a smooth, +gradual and safe refactoring of the existing layered macro system. + +In my humble opinion, this version makes the beauty of Gerald's design +much more evident than the current layered-macro-version. + +Thomas Knudsen, thokn@sdfe.dk, 2016-03-31 + +***********************************************************************/ + +#define PJ_LIB__ +#include +#include +PROJ_HEAD(minimal, "Minimal example (brief description goes here)"); + + +/* Projection specific elements for the PJ object */ +struct pj_opaque { + double a; + int b; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + /* Actual ellipsoidal forward code goes here */ + xy.y = lp.lam + P->es; + xy.x = lp.phi + 42; + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + /* Actual spheroidal forward code goes here */ + xy.y = lp.lam + P->es; + xy.x = lp.phi + 42; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + /* Actual ellipsoidal forward code goes here */ + lp.lam = xy.x - P->es; + lp.phi = xy.y - P->opaque->b; + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + /* Actual spheroidal forward code goes here */ + lp.lam = xy.x - P->es; + lp.phi = xy.y - P->opaque->b; + return lp; +} + + +static void freeup(PJ *P) { /* Destructor */ + if (P==0) + return; + /* Projection specific deallocation goes here */ + pj_dealloc (P->opaque); + pj_dealloc (P); + return; +} + + +PJ *pj_projection_specific_setup_minimal (PJ *P) { + pj_prepare (P, des_minimal, freeup, sizeof (struct pj_opaque)); + if (0==P->opaque) { + freeup (P); + return 0; + } + + P->opaque->a = 42.42; + P->opaque->b = 42; + + /* Spheroidal? */ + if (0==P->es) { + P->fwd = s_forward; + P->inv = s_inverse; + return P; + } + + /* Otherwise it's ellipsoidal */ + P->fwd = e_forward; + P->inv = e_inverse; + + return P; +} diff --git a/proj4/src/PJ_misrsom.c b/proj4/src/PJ_misrsom.c new file mode 100644 index 000000000000..2e7e6b527729 --- /dev/null +++ b/proj4/src/PJ_misrsom.c @@ -0,0 +1,281 @@ +/****************************************************************************** + * This implements Space Oblique Mercator (SOM) projection, used by the + * Multi-angle Imaging SpectroRadiometer (MISR) products, from the NASA EOS Terra + * platform. + * + * The code is identical to that of Landsat SOM (PJ_lsat.c) with the following + * parameter changes: + * + * inclination angle = 98.30382 degrees + * period of revolution = 98.88 minutes + * ascending longitude = 129.3056 degrees - (360 / 233) * path_number + * + * and the following code change: + * + * Q->rlm = PI * (1. / 248. + .5161290322580645); + * + * changed to: + * + * Q->rlm = 0 + * + *****************************************************************************/ +/* based upon Snyder and Linck, USGS-NMD */ +#define PJ_LIB__ +#include + +PROJ_HEAD(misrsom, "Space oblique for MISR") + "\n\tCyl, Sph&Ell\n\tpath="; + +#define TOL 1e-7 + +struct pj_opaque { + double a2, a4, b, c1, c3; + double q, t, u, w, p22, sa, ca, xj, rlm, rlm2; +}; + +static void seraz0(double lam, double mult, PJ *P) { + struct pj_opaque *Q = P->opaque; + double sdsq, h, s, fc, sd, sq, d__1; + + lam *= DEG_TO_RAD; + sd = sin(lam); + sdsq = sd * sd; + s = Q->p22 * Q->sa * cos(lam) * sqrt((1. + Q->t * sdsq) / (( + 1. + Q->w * sdsq) * (1. + Q->q * sdsq))); + d__1 = 1. + Q->q * sdsq; + h = sqrt((1. + Q->q * sdsq) / (1. + Q->w * sdsq)) * ((1. + + Q->w * sdsq) / (d__1 * d__1) - Q->p22 * Q->ca); + sq = sqrt(Q->xj * Q->xj + s * s); + Q->b += fc = mult * (h * Q->xj - s * s) / sq; + Q->a2 += fc * cos(lam + lam); + Q->a4 += fc * cos(lam * 4.); + fc = mult * s * (h + Q->xj) / sq; + Q->c1 += fc * cos(lam); + Q->c3 += fc * cos(lam * 3.); +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + int l, nn; + double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph; + double lamtp, cl, sd, sp, fac, sav, tanphi; + + if (lp.phi > M_HALFPI) + lp.phi = M_HALFPI; + else if (lp.phi < -M_HALFPI) + lp.phi = -M_HALFPI; + lampp = lp.phi >= 0. ? M_HALFPI : M_PI_HALFPI; + tanphi = tan(lp.phi); + for (nn = 0;;) { + sav = lampp; + lamtp = lp.lam + Q->p22 * lampp; + cl = cos(lamtp); + if (fabs(cl) < TOL) + lamtp -= TOL; + fac = lampp - sin(lampp) * (cl < 0. ? -M_HALFPI : M_HALFPI); + for (l = 50; l; --l) { + lamt = lp.lam + Q->p22 * sav; + if (fabs(c = cos(lamt)) < TOL) + lamt -= TOL; + xlam = (P->one_es * tanphi * Q->sa + sin(lamt) * Q->ca) / c; + lamdp = atan(xlam) + fac; + if (fabs(fabs(sav) - fabs(lamdp)) < TOL) + break; + sav = lamdp; + } + if (!l || ++nn >= 3 || (lamdp > Q->rlm && lamdp < Q->rlm2)) + break; + if (lamdp <= Q->rlm) + lampp = M_TWOPI_HALFPI; + else if (lamdp >= Q->rlm2) + lampp = M_HALFPI; + } + if (l) { + sp = sin(lp.phi); + phidp = aasin(P->ctx,(P->one_es * Q->ca * sp - Q->sa * cos(lp.phi) * + sin(lamt)) / sqrt(1. - P->es * sp * sp)); + tanph = log(tan(M_FORTPI + .5 * phidp)); + sd = sin(lamdp); + sdsq = sd * sd; + s = Q->p22 * Q->sa * cos(lamdp) * sqrt((1. + Q->t * sdsq) + / ((1. + Q->w * sdsq) * (1. + Q->q * sdsq))); + d = sqrt(Q->xj * Q->xj + s * s); + xy.x = Q->b * lamdp + Q->a2 * sin(2. * lamdp) + Q->a4 * + sin(lamdp * 4.) - tanph * s / d; + xy.y = Q->c1 * sd + Q->c3 * sin(lamdp * 3.) + tanph * Q->xj / d; + } else + xy.x = xy.y = HUGE_VAL; + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + int nn; + double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp; + + lamdp = xy.x / Q->b; + nn = 50; + do { + sav = lamdp; + sd = sin(lamdp); + sdsq = sd * sd; + s = Q->p22 * Q->sa * cos(lamdp) * sqrt((1. + Q->t * sdsq) + / ((1. + Q->w * sdsq) * (1. + Q->q * sdsq))); + lamdp = xy.x + xy.y * s / Q->xj - Q->a2 * sin( + 2. * lamdp) - Q->a4 * sin(lamdp * 4.) - s / Q->xj * ( + Q->c1 * sin(lamdp) + Q->c3 * sin(lamdp * 3.)); + lamdp /= Q->b; + } while (fabs(lamdp - sav) >= TOL && --nn); + sl = sin(lamdp); + fac = exp(sqrt(1. + s * s / Q->xj / Q->xj) * (xy.y - + Q->c1 * sl - Q->c3 * sin(lamdp * 3.))); + phidp = 2. * (atan(fac) - M_FORTPI); + dd = sl * sl; + if (fabs(cos(lamdp)) < TOL) + lamdp -= TOL; + spp = sin(phidp); + sppsq = spp * spp; + lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * + Q->ca - spp * Q->sa * sqrt((1. + Q->q * dd) * ( + 1. - sppsq) - sppsq * Q->u) / cos(lamdp)) / (1. - sppsq + * (1. + Q->u))); + sl = lamt >= 0. ? 1. : -1.; + scl = cos(lamdp) >= 0. ? 1. : -1; + lamt -= M_HALFPI * (1. - scl) * sl; + lp.lam = lamt - Q->p22 * lamdp; + if (fabs(Q->sa) < TOL) + lp.phi = aasin(P->ctx,spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); + else + lp.phi = atan((tan(lamdp) * cos(lamt) - Q->ca * sin(lamt)) / + (P->one_es * Q->sa)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(misrsom) { + int path; + double lam, alf, esc, ess; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + path = pj_param(P->ctx, P->params, "ipath").i; + if (path <= 0 || path > 233) E_ERROR(-29); + P->lam0 = DEG_TO_RAD * 129.3056 - M_TWOPI / 233. * path; + alf = 98.30382 * DEG_TO_RAD; + Q->p22 = 98.88 / 1440.0; + + Q->sa = sin(alf); + Q->ca = cos(alf); + if (fabs(Q->ca) < 1e-9) + Q->ca = 1e-9; + esc = P->es * Q->ca * Q->ca; + ess = P->es * Q->sa * Q->sa; + Q->w = (1. - esc) * P->rone_es; + Q->w = Q->w * Q->w - 1.; + Q->q = ess * P->rone_es; + Q->t = ess * (2. - P->es) * P->rone_es * P->rone_es; + Q->u = esc * P->rone_es; + Q->xj = P->one_es * P->one_es * P->one_es; + Q->rlm = 0; + Q->rlm2 = Q->rlm + M_TWOPI; + Q->a2 = Q->a4 = Q->b = Q->c1 = Q->c3 = 0.; + seraz0(0., 1., P); + for (lam = 9.; lam <= 81.0001; lam += 18.) + seraz0(lam, 4., P); + for (lam = 18; lam <= 72.0001; lam += 18.) + seraz0(lam, 2., P); + seraz0(90., 1., P); + Q->a2 /= 30.; + Q->a4 /= 60.; + Q->b /= 30.; + Q->c1 /= 15.; + Q->c3 /= 45.; + + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_misrsom_selftest (void) {return 0;} +#else + +int pj_misrsom_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=misrsom +ellps=GRS80 +lat_1=0.5 +lat_2=2 +path=1"}; + char s_args[] = {"+proj=misrsom +a=6400000 +lat_1=0.5 +lat_2=2 +path=1"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {18556630.3683698252, 9533394.6753112711}, + {19041866.0067297369, 9707182.17532352544}, + {18816810.1301847994, 8647669.64980295487}, + {19252610.7845367305, 8778164.08580140397}, + }; + + XY s_fwd_expect[] = { + {18641249.2791703865, 9563342.53233416565}, + {19130982.4615812786, 9739539.59350463562}, + {18903483.5150115378, 8675064.50061797537}, + {19343388.3998006098, 8807471.90406848863}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {127.759503987730625, 0.00173515039622462014}, + {127.761295471077958, 0.00187196632421706517}, + {127.759775773557251, -0.00187196632421891525}, + {127.76156725690457, -0.00173515039622462014}, + }; + + LP s_inv_expect[] = { + {127.75950514818588, 0.00171623111593511971}, + {127.761290323778738, 0.00185412132880796244}, + {127.759780920856471, -0.00185412132880796244}, + {127.761566096449329, -0.00171623111593511971}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_mod_ster.c b/proj4/src/PJ_mod_ster.c new file mode 100644 index 000000000000..785285dbdd22 --- /dev/null +++ b/proj4/src/PJ_mod_ster.c @@ -0,0 +1,541 @@ +/* based upon Snyder and Linck, USGS-NMD */ +#define PJ_LIB__ +#include + +PROJ_HEAD(mil_os, "Miller Oblated Stereographic") "\n\tAzi(mod)"; +PROJ_HEAD(lee_os, "Lee Oblated Stereographic") "\n\tAzi(mod)"; +PROJ_HEAD(gs48, "Mod. Stereographic of 48 U.S.") "\n\tAzi(mod)"; +PROJ_HEAD(alsk, "Mod. Stereographic of Alaska") "\n\tAzi(mod)"; +PROJ_HEAD(gs50, "Mod. Stereographic of 50 U.S.") "\n\tAzi(mod)"; + +#define EPSLN 1e-12 + +struct pj_opaque { + COMPLEX *zcoeff; \ + double cchio, schio; \ + int n; +}; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double sinlon, coslon, esphi, chi, schi, cchi, s; + COMPLEX p; + + sinlon = sin(lp.lam); + coslon = cos(lp.lam); + esphi = P->e * sin(lp.phi); + chi = 2. * atan(tan((M_HALFPI + lp.phi) * .5) * + pow((1. - esphi) / (1. + esphi), P->e * .5)) - M_HALFPI; + schi = sin(chi); + cchi = cos(chi); + s = 2. / (1. + Q->schio * schi + Q->cchio * cchi * coslon); + p.r = s * cchi * sinlon; + p.i = s * (Q->cchio * schi - Q->schio * cchi * coslon); + p = pj_zpoly1(p, Q->zcoeff, Q->n); + xy.x = p.r; + xy.y = p.i; + + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + int nn; + COMPLEX p, fxy, fpxy, dp; + double den, rh, z, sinz, cosz, chi, phi, dphi, esphi; + + p.r = xy.x; + p.i = xy.y; + for (nn = 20; nn ;--nn) { + fxy = pj_zpolyd1(p, Q->zcoeff, Q->n, &fpxy); + fxy.r -= xy.x; + fxy.i -= xy.y; + den = fpxy.r * fpxy.r + fpxy.i * fpxy.i; + dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den; + dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den; + p.r += dp.r; + p.i += dp.i; + if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) + break; + } + if (nn) { + rh = hypot(p.r, p.i); + z = 2. * atan(.5 * rh); + sinz = sin(z); + cosz = cos(z); + lp.lam = P->lam0; + if (fabs(rh) <= EPSLN) { + lp.phi = P->phi0; + return lp; + } + chi = aasin(P->ctx, cosz * Q->schio + p.i * sinz * Q->cchio / rh); + phi = chi; + for (nn = 20; nn ;--nn) { + esphi = P->e * sin(phi); + dphi = 2. * atan(tan((M_HALFPI + chi) * .5) * + pow((1. + esphi) / (1. - esphi), P->e * .5)) - M_HALFPI - phi; + phi += dphi; + if (fabs(dphi) <= EPSLN) + break; + } + } + if (nn) { + lp.phi = phi; + lp.lam = atan2(p.r * sinz, rh * Q->cchio * cosz - p.i * + Q->schio * sinz); + } else + lp.lam = lp.phi = HUGE_VAL; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +static PJ *setup(PJ *P) { /* general initialization */ + struct pj_opaque *Q = P->opaque; + double esphi, chio; + + if (P->es) { + esphi = P->e * sin(P->phi0); + chio = 2. * atan(tan((M_HALFPI + P->phi0) * .5) * + pow((1. - esphi) / (1. + esphi), P->e * .5)) - M_HALFPI; + } else + chio = P->phi0; + Q->schio = sin(chio); + Q->cchio = cos(chio); + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +/* Miller Oblated Stereographic */ +PJ *PROJECTION(mil_os) { + static COMPLEX AB[] = { + {0.924500, 0.}, + {0., 0.}, + {0.019430, 0.} + }; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = 2; + P->lam0 = DEG_TO_RAD * 20.; + P->phi0 = DEG_TO_RAD * 18.; + Q->zcoeff = AB; + P->es = 0.; + + return setup(P); +} + + +/* Lee Oblated Stereographic */ +PJ *PROJECTION(lee_os) { + static COMPLEX AB[] = { + {0.721316, 0.}, + {0., 0.}, + {-0.0088162, -0.00617325} + }; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = 2; + P->lam0 = DEG_TO_RAD * -165.; + P->phi0 = DEG_TO_RAD * -10.; + Q->zcoeff = AB; + P->es = 0.; + + return setup(P); +} + + +PJ *PROJECTION(gs48) { + static COMPLEX /* 48 United States */ + AB[] = { + {0.98879, 0.}, + {0., 0.}, + {-0.050909, 0.}, + {0., 0.}, + {0.075528, 0.} + }; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = 4; + P->lam0 = DEG_TO_RAD * -96.; + P->phi0 = DEG_TO_RAD * -39.; + Q->zcoeff = AB; + P->es = 0.; + P->a = 6370997.; + + return setup(P); +} + + +PJ *PROJECTION(alsk) { + static COMPLEX ABe[] = { /* Alaska ellipsoid */ + { .9945303, 0.}, + { .0052083, -.0027404}, + { .0072721, .0048181}, + {-.0151089, -.1932526}, + { .0642675, -.1381226}, + { .3582802, -.2884586}, + }; + + static COMPLEX ABs[] = { /* Alaska sphere */ + { .9972523, 0.}, + { .0052513, -.0041175}, + { .0074606, .0048125}, + {-.0153783, -.1968253}, + { .0636871, -.1408027}, + { .3660976, -.2937382} + }; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = 5; + P->lam0 = DEG_TO_RAD * -152.; + P->phi0 = DEG_TO_RAD * 64.; + if (P->es) { /* fixed ellipsoid/sphere */ + Q->zcoeff = ABe; + P->a = 6378206.4; + P->e = sqrt(P->es = 0.00676866); + } else { + Q->zcoeff = ABs; + P->a = 6370997.; + } + + return setup(P); +} + + +PJ *PROJECTION(gs50) { + static COMPLEX ABe[] = { /* GS50 ellipsoid */ + { .9827497, 0.}, + { .0210669, .0053804}, + {-.1031415, -.0571664}, + {-.0323337, -.0322847}, + { .0502303, .1211983}, + { .0251805, .0895678}, + {-.0012315, -.1416121}, + { .0072202, -.1317091}, + {-.0194029, .0759677}, + {-.0210072, .0834037} + }; + + static COMPLEX ABs[] = { /* GS50 sphere */ + { .9842990, 0.}, + { .0211642, .0037608}, + {-.1036018, -.0575102}, + {-.0329095, -.0320119}, + { .0499471, .1223335}, + { .0260460, .0899805}, + { .0007388, -.1435792}, + { .0075848, -.1334108}, + {-.0216473, .0776645}, + {-.0225161, .0853673} + }; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = 9; + P->lam0 = DEG_TO_RAD * -120.; + P->phi0 = DEG_TO_RAD * 45.; + if (P->es) { /* fixed ellipsoid/sphere */ + Q->zcoeff = ABe; + P->a = 6378206.4; + P->e = sqrt(P->es = 0.00676866); + } else { + Q->zcoeff = ABs; + P->a = 6370997.; + } + + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_mil_os_selftest (void) {return 0;} +#else + +int pj_mil_os_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=mil_os +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {-1908527.94959420455, -1726237.4730614475}, + {-1916673.02291848511, -1943133.88812552323}, + {-2344429.41208962305, -1706258.05121891224}, + {-2354637.83553299867, -1926468.60513541684}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {20.0020363939492398, 18.0009683469140498}, + {20.0020363715837419, 17.999031631815086}, + {19.9979636060507602, 18.0009683469140498}, + {19.9979636284162581, 17.999031631815086}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_lee_os_selftest (void) {return 0;} +#else + +int pj_lee_os_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=lee_os +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {-25564478.9526050538, 154490848.8286255}, + { 30115393.9385746419, 125193997.439701974}, + {-31039340.5921660066, 57678685.0448915437}, + {-3088419.93942357088, 58150091.0991110131}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {-164.997479457813824, -9.99875886103541411}, + {-164.997479438558884, -10.0012411200022751}, + {-165.002520542186289, -9.99875886103545142}, + {-165.002520561440946, -10.0012411200022999}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_gs48_selftest (void) {return 0;} +#else + +int pj_gs48_selftest (void) { + double tolerance_lp = 1e-12; + double tolerance_xy = 1e-8; + + char s_args[] = {"+proj=gs48 +a=6370997"}; + + /* All latitudes and longitudes within the continental US */ + LP fwd_in[] = { + { -119.0, 40.0}, + { -70.0, 64.0}, + { -80.0, 25.0}, + { -95.0, 35.0} + }; + + XY s_fwd_expect[] = { + {-12110635.970867658000, 11668127.145744404000}, + { 55440975.381938063000, 52147696.705027729000}, + { 4451809.270766614000, 8613528.123849634100}, + { 468857.625827528540, 14336668.749030361000}, + }; + + XY inv_in[] = { + {-11980000.0, 11570000.0}, + { 5500000.0, 52000000.0}, + { 4400000.0, 8600000.0}, + { 460000.0, 14000000.0}, + }; + + LP s_inv_expect[] = { + {-119.003821215898, 39.801671381755}, + { -92.805621432558, 59.836947814918}, + { -80.122548940303, 24.869675983950}, + { -94.990474496482, 34.401182359832}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_alsk_selftest (void) {return 0;} +#else + +int pj_alsk_selftest (void) { + + /* The standard test points are way outside the definition area bounds, hence we relax tolerances */ + double tolerance_lp = 1e-12; + double tolerance_xy = 1e-8; + + char e_args[] = {"+proj=alsk +ellps=clrk66"}; + char s_args[] = {"+proj=alsk +a=6370997"}; + + LP fwd_in[] = { + {-160.0, 55.0}, + {-160.0, 70.0}, + {-145.0, 70.0}, + {-145.0, 60.0} + }; + + XY e_fwd_expect[] = { + {-513253.146950842060, -968928.031867943470}, + {-305001.133897637190, 687494.464958650530}, + {266454.305088600490, 683423.477493030950}, + {389141.322439243960, -423913.251230396680}, + }; + + XY s_fwd_expect[] = { + {-511510.319410844070, -967150.991676078060}, + {-303744.771290368980, 685439.745941123230}, + {265354.974019662940, 681386.892874573010}, + {387711.995394026630, -422980.685505462640}, + }; + + XY inv_in[] = { + {-500000.0, -950000.0}, + {-305000.0, 700000.0}, + { 250000.0, 700000.0}, + { 400000.0, -400000.0} + }; + + LP e_inv_expect[] = { + {-159.830804302926, 55.183195262220}, + {-160.042203155537, 70.111086864056}, + {-145.381043551466, 70.163900908411}, + {-144.758985461448, 60.202929200739}, + }; + + LP s_inv_expect[] = { + {-159.854014457557, 55.165653849074}, + {-160.082332371601, 70.128307617632}, + {-145.347827407243, 70.181566919011}, + {-144.734239827146, 60.193564732505}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_gs50_selftest (void) {return 0;} +#else + +int pj_gs50_selftest (void) { + double tolerance_lp = 1e-12; + double tolerance_xy = 1e-8; + + char e_args[] = {"+proj=gs50 +ellps=clrk66"}; + char s_args[] = {"+proj=gs50 +a=6370997"}; + + LP fwd_in[] = { + {-160.0, 65.0}, + {-130.0, 45.0}, + { -65.0, 45.0}, + { -80.0, 36.0}, + }; + + XY e_fwd_expect[] = { + {-1874628.5377402329, 2660907.942291015300}, + { -771831.51885333552, 48465.166491304852}, + { 4030931.8339815089, 1323687.864777399200}, + { 3450764.2615361013, -175619.041820732440}, + }; + + XY s_fwd_expect[] = { + {-1867268.2534600089, 2656506.230401823300}, + { -769572.18967299373, 48324.312440863941}, + { 4019393.068680791200, 1320191.309350289200}, + { 3442685.615172345700, -178760.423489428680}, + }; + + XY inv_in[] = { + {-1800000.0, 2600000.0}, + { -800000.0, 500000.0}, + { 4000000.0, 1300000.0}, + { 3900000.0, -170000.0}, + }; + + LP e_inv_expect[] = { + {-157.989284999679, 64.851559609698}, + {-131.171390466814, 49.084969745967}, + { -65.491568685301, 44.992837923774}, + { -75.550660091101, 34.191114075743}, + }; + + LP s_inv_expect[] = { + {-158.163295044933, 64.854288364994}, + {-131.206816959506, 49.082915350974}, + { -65.348945220767, 44.957292681774}, + { -75.446820242089, 34.185406225616}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_moll.c b/proj4/src/PJ_moll.c new file mode 100644 index 000000000000..b975cc73294d --- /dev/null +++ b/proj4/src/PJ_moll.c @@ -0,0 +1,259 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(moll, "Mollweide") "\n\tPCyl., Sph."; +PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl., Sph."; +PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl., Sph."; + +#define MAX_ITER 10 +#define LOOP_TOL 1e-7 + +struct pj_opaque { + double C_x, C_y, C_p; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double k, V; + int i; + + k = Q->C_p * sin(lp.phi); + for (i = MAX_ITER; i ; --i) { + lp.phi -= V = (lp.phi + sin(lp.phi) - k) / + (1. + cos(lp.phi)); + if (fabs(V) < LOOP_TOL) + break; + } + if (!i) + lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; + else + lp.phi *= 0.5; + xy.x = Q->C_x * lp.lam * cos(lp.phi); + xy.y = Q->C_y * sin(lp.phi); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + lp.phi = aasin(P->ctx, xy.y / Q->C_y); + lp.lam = xy.x / (Q->C_x * cos(lp.phi)); + if (fabs(lp.lam) < M_PI) { + lp.phi += lp.phi; + lp.phi = aasin(P->ctx, (lp.phi + sin(lp.phi)) / Q->C_p); + } else { + lp.lam = lp.phi = HUGE_VAL; + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ * setup(PJ *P, double p) { + struct pj_opaque *Q = P->opaque; + double r, sp, p2 = p + p; + + P->es = 0; + sp = sin(p); + r = sqrt(M_TWOPI * sp / (p2 + sin(p2))); + + Q->C_x = 2. * r / M_PI; + Q->C_y = r / sp; + Q->C_p = p2 + sin(p2); + + P->inv = s_inverse; + P->fwd = s_forward; + return P; +} + + +PJ *PROJECTION(moll) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + return setup(P, M_HALFPI); +} + + +PJ *PROJECTION(wag4) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + return setup(P, M_PI/3.); +} + +PJ *PROJECTION(wag5) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + P->es = 0; + Q->C_x = 0.90977; + Q->C_y = 1.65014; + Q->C_p = 3.00896; + + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_moll_selftest (void) {return 0;} +#else + +int pj_moll_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=moll +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {201113.698641813244, 124066.283433859542}, + {201113.698641813244, -124066.283433859542}, + {-201113.698641813244, 124066.283433859542}, + {-201113.698641813244, -124066.283433859542}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.00198873782220854774, 0.000806005080362811612}, + {0.00198873782220854774, -0.000806005080362811612}, + {-0.00198873782220854774, 0.000806005080362811612}, + {-0.00198873782220854774, -0.000806005080362811612}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_wag4_selftest (void) {return 0;} +#else + +int pj_wag4_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag4 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 192801.218662384286, 129416.216394802992}, + { 192801.218662384286, -129416.216394802992}, + {-192801.218662384286, 129416.216394802992}, + {-192801.218662384286, -129416.216394802992}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00207450259783523421, 0.000772682950537716476}, + { 0.00207450259783523421, -0.000772682950537716476}, + {-0.00207450259783523421, 0.000772682950537716476}, + {-0.00207450259783523421, -0.000772682950537716476}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + +#ifndef PJ_SELFTEST +int pj_wag5_selftest (void) {return 0;} +#else + +int pj_wag5_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag5 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + + XY s_fwd_expect[] = { + { 203227.05192532466, 138651.631442713202}, + { 203227.05192532466, -138651.631442713202}, + {-203227.05192532466, 138651.631442713202}, + {-203227.05192532466, -138651.631442713202}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + + + + LP s_inv_expect[] = { + { 0.00196807227086416396, 0.00072121615041701424}, + { 0.00196807227086416396, -0.00072121615041701424}, + {-0.00196807227086416396, 0.00072121615041701424}, + {-0.00196807227086416396, -0.00072121615041701424}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_natearth.c b/proj4/src/PJ_natearth.c new file mode 100644 index 000000000000..22bf340d6622 --- /dev/null +++ b/proj4/src/PJ_natearth.c @@ -0,0 +1,150 @@ +/* +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 + +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 * M_PI) + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double phi2, phi4; + (void) P; + + 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; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double yc, tol, y2, y4, f, fder; + (void) P; + + /* 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; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(natearth) { + P->es = 0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_natearth_selftest (void) {return 0;} +#else + +int pj_natearth_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=natearth +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 194507.265257889288, 112508.737358294515}, + { 194507.265257889288, -112508.737358294515}, + {-194507.265257889288, 112508.737358294515}, + {-194507.265257889288, -112508.737358294515}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00205638349586440223, 0.000888823913291242177}, + { 0.00205638349586440223, -0.000888823913291242177}, + {-0.00205638349586440223, 0.000888823913291242177}, + {-0.00205638349586440223, -0.000888823913291242177}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_natearth2.c b/proj4/src/PJ_natearth2.c new file mode 100644 index 000000000000..9cd93fdfb34e --- /dev/null +++ b/proj4/src/PJ_natearth2.c @@ -0,0 +1,147 @@ +/* +The Natural Earth II projection was designed by Tom Patterson, US National +Park Service, in 2012, using Flex Projector. The polynomial equation was +developed by Bojan Savric and Bernhard Jenny, College of Earth, Ocean, +and Atmospheric Sciences, Oregon State University. +Port to PROJ.4 by Bojan Savric, 4 April 2016 +*/ +#define PJ_LIB__ +#include + +PROJ_HEAD(natearth2, "Natural Earth 2") "\n\tPCyl., Sph."; + +#define A0 0.84719 +#define A1 -0.13063 +#define A2 -0.04515 +#define A3 0.05494 +#define A4 -0.02326 +#define A5 0.00331 +#define B0 1.01183 +#define B1 -0.02625 +#define B2 0.01926 +#define B3 -0.00396 +#define C0 B0 +#define C1 (9 * B1) +#define C2 (11 * B2) +#define C3 (13 * B3) +#define EPS 1e-11 +#define MAX_Y (0.84719 * 0.535117535153096 * M_PI) + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double phi2, phi4, phi6; + (void) P; + + phi2 = lp.phi * lp.phi; + phi4 = phi2 * phi2; + phi6 = phi2 * phi4; + + xy.x = lp.lam * (A0 + A1 * phi2 + phi6 * phi6 * (A2 + A3 * phi2 + A4 * phi4 + A5 * phi6)); + xy.y = lp.phi * (B0 + phi4 * phi4 * (B1 + B2 * phi2 + B3 * phi4)); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double yc, tol, y2, y4, y6, f, fder; + (void) P; + + /* 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 + y4 * y4 * (B1 + B2 * y2 + B3 * y4))) - xy.y; + fder = C0 + y4 * y4 * (C1 + C2 * y2 + C3 * y4); + yc -= tol = f / fder; + if (fabs(tol) < EPS) { + break; + } + } + lp.phi = yc; + + /* longitude */ + y2 = yc * yc; + y4 = y2 * y2; + y6 = y2 * y4; + + lp.lam = xy.x / (A0 + A1 * y2 + y6 * y6 * (A2 + A3 * y2 + A4 * y4 + A5 * y6)); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(natearth2) { + P->es = 0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_natearth2_selftest (void) {return 0;} +#else + +int pj_natearth2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=natearth2 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 189255.172934730799, 113022.495810907014}, + { 189255.172934730799, -113022.495810907014}, + {-189255.172934730799, 113022.495810907014}, + {-189255.172934730799, -113022.495810907014}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00211344929691056112, 0.000884779612080993237}, + { 0.00211344929691056112, -0.000884779612080993237}, + {-0.00211344929691056112, 0.000884779612080993237}, + {-0.00211344929691056112, -0.000884779612080993237}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_nell.c b/proj4/src/PJ_nell.c new file mode 100644 index 000000000000..1b6af0102540 --- /dev/null +++ b/proj4/src/PJ_nell.c @@ -0,0 +1,106 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(nell, "Nell") "\n\tPCyl., Sph."; + +#define MAX_ITER 10 +#define LOOP_TOL 1e-7 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double k, V; + int i; + (void) P; + + k = 2. * sin(lp.phi); + V = lp.phi * lp.phi; + lp.phi *= 1.00371 + V * (-0.0935382 + V * -0.011412); + for (i = MAX_ITER; i ; --i) { + lp.phi -= V = (lp.phi + sin(lp.phi) - k) / + (1. + cos(lp.phi)); + if (fabs(V) < LOOP_TOL) + break; + } + xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); + xy.y = lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + lp.lam = 2. * xy.x / (1. + cos(xy.y)); + lp.phi = aasin(P->ctx,0.5 * (xy.y + sin(xy.y))); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(nell) { + + P->es = 0; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_nell_selftest (void) {return 0;} +#else + +int pj_nell_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=nell +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223385.132504695706, 111698.23644718733}, + { 223385.132504695706, -111698.23644718733}, + {-223385.132504695706, 111698.23644718733}, + {-223385.132504695706, -111698.23644718733}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179049310989310567, 0.000895246554910125161}, + { 0.00179049310989310567, -0.000895246554910125161}, + {-0.00179049310989310567, 0.000895246554910125161}, + {-0.00179049310989310567, -0.000895246554910125161}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_nell_h.c b/proj4/src/PJ_nell_h.c new file mode 100644 index 000000000000..dfad72b2fb3c --- /dev/null +++ b/proj4/src/PJ_nell_h.c @@ -0,0 +1,109 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl., Sph."; + +#define NITER 9 +#define EPS 1e-7 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); + xy.y = 2.0 * (lp.phi - tan(0.5 *lp.phi)); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double V, c, p; + int i; + (void) P; + + p = 0.5 * xy.y; + for (i = NITER; i ; --i) { + c = cos(0.5 * lp.phi); + lp.phi -= V = (lp.phi - tan(lp.phi/2) - p)/(1. - 0.5/(c*c)); + if (fabs(V) < EPS) + break; + } + if (!i) { + lp.phi = p < 0. ? -M_HALFPI : M_HALFPI; + lp.lam = 2. * xy.x; + } else + lp.lam = 2. * xy.x / (1. + cos(lp.phi)); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(nell_h) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_nell_h_selftest (void) {return 0;} +#else + +int pj_nell_h_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=nell_h +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223385.131640952837, 111698.236533561678}, + { 223385.131640952837, -111698.236533561678}, + {-223385.131640952837, 111698.236533561678}, + {-223385.131640952837, -111698.236533561678}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179049310989310567, 0.000895246554910125378}, + { 0.00179049310989310567, -0.000895246554910125378}, + {-0.00179049310989310567, 0.000895246554910125378}, + {-0.00179049310989310567, -0.000895246554910125378}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_nocol.c b/proj4/src/PJ_nocol.c new file mode 100644 index 000000000000..88836a10a84b --- /dev/null +++ b/proj4/src/PJ_nocol.c @@ -0,0 +1,96 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv."; + +#define EPS 1e-10 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + (void) P; + + if (fabs(lp.lam) < EPS) { + xy.x = 0; + xy.y = lp.phi; + } else if (fabs(lp.phi) < EPS) { + xy.x = lp.lam; + xy.y = 0.; + } else if (fabs(fabs(lp.lam) - M_HALFPI) < EPS) { + xy.x = lp.lam * cos(lp.phi); + xy.y = M_HALFPI * sin(lp.phi); + } else if (fabs(fabs(lp.phi) - M_HALFPI) < EPS) { + xy.x = 0; + xy.y = lp.phi; + } else { + double tb, c, d, m, n, r2, sp; + + tb = M_HALFPI / lp.lam - lp.lam / M_HALFPI; + c = lp.phi / M_HALFPI; + d = (1 - c * c)/((sp = sin(lp.phi)) - c); + r2 = tb / d; + r2 *= r2; + m = (tb * sp / d - 0.5 * tb)/(1. + r2); + n = (sp / r2 + 0.5 * d)/(1. + 1./r2); + xy.x = cos(lp.phi); + xy.x = sqrt(m * m + xy.x * xy.x / (1. + r2)); + xy.x = M_HALFPI * ( m + (lp.lam < 0. ? -xy.x : xy.x)); + xy.y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) / + (1. + 1./r2)); + xy.y = M_HALFPI * ( n + (lp.phi < 0. ? xy.y : -xy.y )); + } + return (xy); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(nicol) { + P->es = 0.; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_nicol_selftest (void) {return 0;} +#else + +int pj_nicol_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=nicol +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223374.561814139714, 111732.553988545071}, + { 223374.561814139714, -111732.553988545071}, + {-223374.561814139714, 111732.553988545071}, + {-223374.561814139714, -111732.553988545071}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_nsper.c b/proj4/src/PJ_nsper.c new file mode 100644 index 000000000000..014c711b79fc --- /dev/null +++ b/proj4/src/PJ_nsper.c @@ -0,0 +1,287 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double height; + double sinph0; + double cosph0; + double p; + double rp; + double pn1; + double pfact; + double h; + double cg; + double sg; + double sw; + double cw; + int mode; + int tilt; +}; + +PROJ_HEAD(nsper, "Near-sided perspective") "\n\tAzi, Sph\n\th="; +PROJ_HEAD(tpers, "Tilted perspective") "\n\tAzi, Sph\n\ttilt= azi= h="; + +# define EPS10 1.e-10 +# define N_POLE 0 +# define S_POLE 1 +# define EQUIT 2 +# define OBLIQ 3 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, cosphi, sinphi; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + switch (Q->mode) { + case OBLIQ: + xy.y = Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam; + break; + case EQUIT: + xy.y = cosphi * coslam; + break; + case S_POLE: + xy.y = - sinphi; + break; + case N_POLE: + xy.y = sinphi; + break; + } + if (xy.y < Q->rp) F_ERROR; + xy.y = Q->pn1 / (Q->p - xy.y); + xy.x = xy.y * cosphi * sin(lp.lam); + switch (Q->mode) { + case OBLIQ: + xy.y *= (Q->cosph0 * sinphi - + Q->sinph0 * cosphi * coslam); + break; + case EQUIT: + xy.y *= sinphi; + break; + case N_POLE: + coslam = - coslam; + case S_POLE: + xy.y *= cosphi * coslam; + break; + } + if (Q->tilt) { + double yt, ba; + + yt = xy.y * Q->cg + xy.x * Q->sg; + ba = 1. / (yt * Q->sw * Q->h + Q->cw); + xy.x = (xy.x * Q->cg - xy.y * Q->sg) * Q->cw * ba; + xy.y = yt * ba; + } + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rh, cosz, sinz; + + if (Q->tilt) { + double bm, bq, yt; + + yt = 1./(Q->pn1 - xy.y * Q->sw); + bm = Q->pn1 * xy.x * yt; + bq = Q->pn1 * xy.y * Q->cw * yt; + xy.x = bm * Q->cg + bq * Q->sg; + xy.y = bq * Q->cg - bm * Q->sg; + } + rh = hypot(xy.x, xy.y); + if ((sinz = 1. - rh * rh * Q->pfact) < 0.) I_ERROR; + sinz = (Q->p - sqrt(sinz)) / (Q->pn1 / rh + rh / Q->pn1); + cosz = sqrt(1. - sinz * sinz); + if (fabs(rh) <= EPS10) { + lp.lam = 0.; + lp.phi = P->phi0; + } else { + switch (Q->mode) { + case OBLIQ: + lp.phi = asin(cosz * Q->sinph0 + xy.y * sinz * Q->cosph0 / rh); + xy.y = (cosz - Q->sinph0 * sin(lp.phi)) * rh; + xy.x *= sinz * Q->cosph0; + break; + case EQUIT: + lp.phi = asin(xy.y * sinz / rh); + xy.y = cosz * rh; + xy.x *= sinz; + break; + case N_POLE: + lp.phi = asin(cosz); + xy.y = -xy.y; + break; + case S_POLE: + lp.phi = - asin(cosz); + break; + } + lp.lam = atan2(xy.x, xy.y); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ *setup(PJ *P) { + struct pj_opaque *Q = P->opaque; + + if ((Q->height = pj_param(P->ctx, P->params, "dh").f) <= 0.) E_ERROR(-30); + if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) + Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; + else if (fabs(P->phi0) < EPS10) + Q->mode = EQUIT; + else { + Q->mode = OBLIQ; + Q->sinph0 = sin(P->phi0); + Q->cosph0 = cos(P->phi0); + } + Q->pn1 = Q->height / P->a; /* normalize by radius */ + Q->p = 1. + Q->pn1; + Q->rp = 1. / Q->p; + Q->h = 1. / Q->pn1; + Q->pfact = (Q->p + 1.) * Q->h; + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + return P; +} + + +PJ *PROJECTION(nsper) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->tilt = 0; + + return setup(P); +} + + +PJ *PROJECTION(tpers) { + double omega, gamma; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + omega = pj_param(P->ctx, P->params, "dtilt").f * DEG_TO_RAD; + gamma = pj_param(P->ctx, P->params, "dazi").f * DEG_TO_RAD; + Q->tilt = 1; + Q->cg = cos(gamma); Q->sg = sin(gamma); + Q->cw = cos(omega); Q->sw = sin(omega); + + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_nsper_selftest (void) {return 0;} +#else + +int pj_nsper_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=nsper +a=6400000 +h=1000000"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 222239.816114099842, 111153.763991924759}, + { 222239.816114099842, -111153.763991924759}, + {-222239.816114099842, 111153.763991924759}, + {-222239.816114099842, -111153.763991924759}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179049311728792437, 0.000895246558425396135}, + { 0.00179049311728792437, -0.000895246558425396135}, + {-0.00179049311728792437, 0.000895246558425396135}, + {-0.00179049311728792437, -0.000895246558425396135}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + + +#ifndef PJ_SELFTEST +int pj_tpers_selftest (void) {return 0;} +#else + +int pj_tpers_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=tpers +a=6400000 +h=1000000 +azi=20"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 170820.288955531199, 180460.865555804776}, + { 246853.941538942483, -28439.8780357754222}, + {-246853.941538942483, 28439.8780357754222}, + {-170820.288955531199, -180460.865555804776} + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00198870552603137678, 0.000228871872278689991}, + { 0.00137632081376749859, -0.00145364129728205432}, + {-0.00137632081376749859, 0.00145364129728205432}, + {-0.00198870552603137678, -0.000228871872278689991}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_nzmg.c b/proj4/src/PJ_nzmg.c new file mode 100644 index 000000000000..6c705502d78f --- /dev/null +++ b/proj4/src/PJ_nzmg.c @@ -0,0 +1,177 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the nzmg (New Zealand Map Grid) projection. + * Very loosely based upon DMA code by Bradford W. Drew + * Author: Gerald Evenden + * + ****************************************************************************** + * Copyright (c) 1995, Gerald 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 PJ_LIB__ +#include + +PROJ_HEAD(nzmg, "New Zealand Map Grid") "\n\tfixed Earth"; + +#define EPSLN 1e-10 +#define SEC5_TO_RAD 0.4848136811095359935899141023 +#define RAD_TO_SEC5 2.062648062470963551564733573 + +static COMPLEX bf[] = { + { .7557853228, 0.0}, + { .249204646, 0.003371507}, + {-.001541739, 0.041058560}, + {-.10162907, 0.01727609}, + {-.26623489, -0.36249218}, + {-.6870983, -1.1651967} }; + +static double tphi[] = { 1.5627014243, .5185406398, -.03333098, + -.1052906, -.0368594, .007317, + .01220, .00394, -.0013 }; + +static double tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879, + -.0055161, .0026906, -.001333, .00067, -.00034 }; + +#define Nbf 5 +#define Ntpsi 9 +#define Ntphi 8 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + COMPLEX p; + double *C; + int i; + + lp.phi = (lp.phi - P->phi0) * RAD_TO_SEC5; + for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i) + p.r = *--C + lp.phi * p.r; + p.r *= lp.phi; + p.i = lp.lam; + p = pj_zpoly1(p, bf, Nbf); + xy.x = p.i; + xy.y = p.r; + + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + int nn, i; + COMPLEX p, f, fp, dp; + double den, *C; + + p.r = xy.y; + p.i = xy.x; + for (nn = 20; nn ;--nn) { + f = pj_zpolyd1(p, bf, Nbf, &fp); + f.r -= xy.y; + f.i -= xy.x; + den = fp.r * fp.r + fp.i * fp.i; + p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den; + p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den; + if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) + break; + } + if (nn) { + lp.lam = p.i; + for (lp.phi = *(C = tphi + (i = Ntphi)); i ; --i) + lp.phi = *--C + p.r * lp.phi; + lp.phi = P->phi0 + p.r * lp.phi * SEC5_TO_RAD; + } else + lp.lam = lp.phi = HUGE_VAL; + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(nzmg) { + /* force to International major axis */ + P->ra = 1. / (P->a = 6378388.0); + P->lam0 = DEG_TO_RAD * 173.; + P->phi0 = DEG_TO_RAD * -41.; + P->x0 = 2510000.; + P->y0 = 6023150.; + + P->inv = e_inverse; + P->fwd = e_forward; + + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_nzmg_selftest (void) {return 0;} +#else + +int pj_nzmg_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=nzmg +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {3352675144.74742508, -7043205391.10024357}, + {3691989502.77930641, -6729069415.33210468}, + {4099000768.45323849, -7863208779.66724873}, + {4466166927.36997604, -7502531736.62860489}, + }; + + XY inv_in[] = { + { 200000, 100000}, + { 200000,-100000}, + {-200000, 100000}, + {-200000,-100000} + }; + + LP e_inv_expect[] = { + {175.48208682711271, -69.4226921826331846}, + {175.756819472543611, -69.5335710883796168}, + {134.605119233460016, -61.4599957106629091}, + {134.333684315954827, -61.6215536756024349}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_ob_tran.c b/proj4/src/PJ_ob_tran.c new file mode 100644 index 000000000000..b0c22f66e73b --- /dev/null +++ b/proj4/src/PJ_ob_tran.c @@ -0,0 +1,225 @@ +#define PJ_LIB__ +#include +#include + +struct pj_opaque { + struct PJconsts *link; + double lamp; + double cphip, sphip; +}; + +PROJ_HEAD(ob_tran, "General Oblique Transformation") "\n\tMisc Sph" +"\n\to_proj= plus parameters for projection" +"\n\to_lat_p= o_lon_p= (new pole) or" +"\n\to_alpha= o_lon_c= o_lat_c= or" +"\n\to_lon_1= o_lat_1= o_lon_2= o_lat_2="; + +#define TOL 1e-10 + + +static XY o_forward(LP lp, PJ *P) { /* spheroid */ + struct pj_opaque *Q = P->opaque; + double coslam, sinphi, cosphi; + + coslam = cos(lp.lam); + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), Q->sphip * cosphi * coslam + + Q->cphip * sinphi) + Q->lamp); + lp.phi = aasin(P->ctx,Q->sphip * sinphi - Q->cphip * cosphi * coslam); + + return Q->link->fwd(lp, Q->link); +} + + +static XY t_forward(LP lp, PJ *P) { /* spheroid */ + struct pj_opaque *Q = P->opaque; + double cosphi, coslam; + + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), sin(lp.phi)) + Q->lamp); + lp.phi = aasin(P->ctx, - cosphi * coslam); + + return Q->link->fwd(lp, Q->link); +} + + +static LP o_inverse(XY xy, PJ *P) { /* spheroid */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, sinphi, cosphi; + + lp = Q->link->inv(xy, Q->link); + if (lp.lam != HUGE_VAL) { + coslam = cos(lp.lam -= Q->lamp); + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + lp.phi = aasin(P->ctx,Q->sphip * sinphi + Q->cphip * cosphi * coslam); + lp.lam = aatan2(cosphi * sin(lp.lam), Q->sphip * cosphi * coslam - + Q->cphip * sinphi); + } + return lp; +} + + +static LP t_inverse(XY xy, PJ *P) { /* spheroid */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosphi, t; + + lp = Q->link->inv(xy, Q->link); + if (lp.lam != HUGE_VAL) { + cosphi = cos(lp.phi); + t = lp.lam - Q->lamp; + lp.lam = aatan2(cosphi * sin(t), - sin(lp.phi)); + lp.phi = aasin(P->ctx,cosphi * cos(t)); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + if (P->opaque->link) + return pj_dealloc (P->opaque->link); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(ob_tran) { + int i; + double phip; + char *name, *s; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + /* get name of projection to be translated */ + 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 || !(Q->link = (*pj_list[i].proj)(0))) E_ERROR(-37); + /* copy existing header into new */ + P->es = 0.; /* force to spherical */ + Q->link->params = P->params; + Q->link->ctx = P->ctx; + Q->link->over = P->over; + Q->link->geoc = P->geoc; + Q->link->a = P->a; + Q->link->es = P->es; + Q->link->ra = P->ra; + Q->link->lam0 = P->lam0; + Q->link->phi0 = P->phi0; + Q->link->x0 = P->x0; + Q->link->y0 = P->y0; + Q->link->k0 = P->k0; + /* force spherical earth */ + Q->link->one_es = Q->link->rone_es = 1.; + Q->link->es = Q->link->e = 0.; + if (!(Q->link = pj_list[i].proj(Q->link))) { + return freeup_new(P); + } + if (pj_param(P->ctx, P->params, "to_alpha").i) { + double lamc, phic, alpha; + + 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 || + fabs(fabs(alpha) - HALFPI) <= TOL) +*/ + if (fabs(fabs(phic) - M_HALFPI) <= TOL) + E_ERROR(-32); + Q->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic)); + phip = aasin(P->ctx,cos(phic) * sin(alpha)); + } else if (pj_param(P->ctx, P->params, "to_lat_p").i) { /* specified new pole */ + Q->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->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 - M_HALFPI) <= TOL || + fabs(fabs(phi2) - M_HALFPI) <= TOL) E_ERROR(-33); + Q->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) - + sin(phi1) * cos(phi2) * cos(lam2), + sin(phi1) * cos(phi2) * sin(lam2) - + cos(phi1) * sin(phi2) * sin(lam1)); + phip = atan(-cos(Q->lamp - lam1) / tan(phi1)); + } + if (fabs(phip) > TOL) { /* oblique */ + Q->cphip = cos(phip); + Q->sphip = sin(phip); + P->fwd = o_forward; + P->inv = Q->link->inv ? o_inverse : 0; + } else { /* transverse */ + P->fwd = t_forward; + P->inv = Q->link->inv ? t_inverse : 0; + } + + return P; +} + +#ifndef PJ_SELFTEST +int pj_ob_tran_selftest (void) {return 0;} +#else + +int pj_ob_tran_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=ob_tran +a=6400000 +o_proj=latlon +o_lon_p=20 +o_lat_p=20 +lon_0=180"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {-2.6856872138416592, 1.2374302350496296}, + {-2.6954069748943286, 1.2026833954513816}, + {-2.8993663925401947, 1.2374302350496296}, + {-2.8896466314875244, 1.2026833954513816}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 121.5518748407577, -2.5361001573966084}, + { 63.261184340201858, 17.585319578673531}, + {-141.10073322351622, 26.091712304855108}, + {-65.862385598848391, 51.830295078417215}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif diff --git a/proj4/src/PJ_ocea.c b/proj4/src/PJ_ocea.c new file mode 100644 index 000000000000..e77ae54ad356 --- /dev/null +++ b/proj4/src/PJ_ocea.c @@ -0,0 +1,153 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph" + "lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2="; + +struct pj_opaque { + double rok; + double rtk; + double sinphi; + double cosphi; + double singam; + double cosgam; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double t; + + xy.y = sin(lp.lam); + t = cos(lp.lam); + xy.x = atan((tan(lp.phi) * Q->cosphi + Q->sinphi * xy.y) / t); + if (t < 0.) + xy.x += M_PI; + xy.x *= Q->rtk; + xy.y = Q->rok * (Q->sinphi * sin(lp.phi) - Q->cosphi * cos(lp.phi) * xy.y); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double t, s; + + xy.y /= Q->rok; + xy.x /= Q->rtk; + t = sqrt(1. - xy.y * xy.y); + lp.phi = asin(xy.y * Q->sinphi + t * Q->cosphi * (s = sin(xy.x))); + lp.lam = atan2(t * Q->sinphi * s - xy.y * Q->cosphi, + t * cos(xy.x)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(ocea) { + double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->rok = P->a / P->k0; + Q->rtk = P->a * P->k0; + /*If the keyword "alpha" is found in the sentence then use 1point+1azimuth*/ + if ( pj_param(P->ctx, P->params, "talpha").i) { + /*Define Pole of oblique transformation from 1 point & 1 azimuth*/ + alpha = pj_param(P->ctx, P->params, "ralpha").f; + lonz = pj_param(P->ctx, P->params, "rlonc").f; + /*Equation 9-8 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ + Q->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; + /*Equation 9-7 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ + Q->sinphi = asin(cos(phi_0) * sin(alpha)); + /*If the keyword "alpha" is NOT found in the sentence then use 2points*/ + } else { + /*Define Pole of oblique transformation from 2 points*/ + 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; + /*Equation 9-1 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ + Q->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) - + cos(phi_1) * sin(phi_2) * sin(lam_1) ); + /*Equation 9-2 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ + Q->sinphi = atan(-cos(Q->singam - lam_1) / tan(phi_1)); + } + P->lam0 = Q->singam + M_HALFPI; + Q->cosphi = cos(Q->sinphi); + Q->sinphi = sin(Q->sinphi); + Q->cosgam = cos(Q->singam); + Q->singam = sin(Q->singam); + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_ocea_selftest (void) {return 0;} +#else + +int pj_ocea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=ocea +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {127964312562778.156, 1429265667691.05786}, + {129394957619297.641, 1429265667691.06812}, + {127964312562778.188, -1429265667691.0498}, + {129394957619297.688, -1429265667691.03955}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 179.999999999860108, 2.79764548403721305e-10}, + {-179.999999999860108, 2.7976454840372327e-10}, + { 179.999999999860108, -2.7976454840372327e-10}, + {-179.999999999860108, -2.79764548403721305e-10}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_oea.c b/proj4/src/PJ_oea.c new file mode 100644 index 000000000000..1ad8ddb276ad --- /dev/null +++ b/proj4/src/PJ_oea.c @@ -0,0 +1,140 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(oea, "Oblated Equal Area") "\n\tMisc Sph\n\tn= m= theta="; + +struct pj_opaque { + double theta; + double m, n; + double two_r_m, two_r_n, rm, rn, hm, hn; + double cp0, sp0; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double Az, M, N, cp, sp, cl, shz; + + cp = cos(lp.phi); + sp = sin(lp.phi); + cl = cos(lp.lam); + Az = aatan2(cp * sin(lp.lam), Q->cp0 * sp - Q->sp0 * cp * cl) + Q->theta; + shz = sin(0.5 * aacos(P->ctx, Q->sp0 * sp + Q->cp0 * cp * cl)); + M = aasin(P->ctx, shz * sin(Az)); + N = aasin(P->ctx, shz * cos(Az) * cos(M) / cos(M * Q->two_r_m)); + xy.y = Q->n * sin(N * Q->two_r_n); + xy.x = Q->m * sin(M * Q->two_r_m) * cos(N) / cos(N * Q->two_r_n); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double N, M, xp, yp, z, Az, cz, sz, cAz; + + N = Q->hn * aasin(P->ctx,xy.y * Q->rn); + M = Q->hm * aasin(P->ctx,xy.x * Q->rm * cos(N * Q->two_r_n) / cos(N)); + xp = 2. * sin(M); + yp = 2. * sin(N) * cos(M * Q->two_r_m) / cos(M); + cAz = cos(Az = aatan2(xp, yp) - Q->theta); + z = 2. * aasin(P->ctx, 0.5 * hypot(xp, yp)); + sz = sin(z); + cz = cos(z); + lp.phi = aasin(P->ctx, Q->sp0 * cz + Q->cp0 * sz * cAz); + lp.lam = aatan2(sz * sin(Az), + Q->cp0 * cz - Q->sp0 * sz * cAz); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(oea) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (((Q->n = pj_param(P->ctx, P->params, "dn").f) <= 0.) || + ((Q->m = pj_param(P->ctx, P->params, "dm").f) <= 0.)) + E_ERROR(-39) + else { + Q->theta = pj_param(P->ctx, P->params, "rtheta").f; + Q->sp0 = sin(P->phi0); + Q->cp0 = cos(P->phi0); + Q->rn = 1./ Q->n; + Q->rm = 1./ Q->m; + Q->two_r_n = 2. * Q->rn; + Q->two_r_m = 2. * Q->rm; + Q->hm = 0.5 * Q->m; + Q->hn = 0.5 * Q->n; + P->fwd = s_forward; + P->inv = s_inverse; + P->es = 0.; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_oea_selftest (void) {return 0;} +#else + +int pj_oea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=oea +a=6400000 +lat_1=0.5 +lat_2=2 +n=1 +m=2 +theta=3"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 228926.872097864107, 99870.4884300760023}, + { 217242.584036940476, -123247.885607474513}, + {-217242.584036940476, 123247.885607474556}, + {-228926.872097864078, -99870.4884300760168}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017411857167771369, 0.000987726819566195693}, + { 0.00183489288577854998, -0.000800312481495174641}, + {-0.00183489288577854954, 0.000800312481495174966}, + {-0.00174118571677713712, -0.000987726819566195043}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_omerc.c b/proj4/src/PJ_omerc.c new file mode 100644 index 000000000000..de4a2c39b9cf --- /dev/null +++ b/proj4/src/PJ_omerc.c @@ -0,0 +1,282 @@ +/* +** 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 PJ_LIB__ +#include + +PROJ_HEAD(omerc, "Oblique Mercator") + "\n\tCyl, Sph&Ell no_rot\n\t" + "alpha= [gamma=] [no_off] lonc= or\n\t lon_1= lat_1= lon_2= lat_2="; + +struct pj_opaque { + 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 TOL 1.e-7 +#define EPS 1.e-10 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double S, T, U, V, W, temp, u, v; + + if (fabs(fabs(lp.phi) - M_HALFPI) > EPS) { + W = Q->E / pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), Q->B); + temp = 1. / W; + S = .5 * (W - temp); + T = .5 * (W + temp); + V = sin(Q->B * lp.lam); + U = (S * Q->singam - V * Q->cosgam) / T; + if (fabs(fabs(U) - 1.0) < EPS) + F_ERROR; + v = 0.5 * Q->ArB * log((1. - U)/(1. + U)); + temp = cos(Q->B * lp.lam); + if(fabs(temp) < TOL) { + u = Q->A * lp.lam; + } else { + u = Q->ArB * atan2((S * Q->cosgam + V * Q->singam), temp); + } + } else { + v = lp.phi > 0 ? Q->v_pole_n : Q->v_pole_s; + u = Q->ArB * lp.phi; + } + if (Q->no_rot) { + xy.x = u; + xy.y = v; + } else { + u -= Q->u_0; + xy.x = v * Q->cosrot + u * Q->sinrot; + xy.y = u * Q->cosrot - v * Q->sinrot; + } + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double u, v, Qp, Sp, Tp, Vp, Up; + + if (Q->no_rot) { + v = xy.y; + u = xy.x; + } else { + v = xy.x * Q->cosrot - xy.y * Q->sinrot; + u = xy.y * Q->cosrot + xy.x * Q->sinrot + Q->u_0; + } + Qp = exp(- Q->BrA * v); + Sp = .5 * (Qp - 1. / Qp); + Tp = .5 * (Qp + 1. / Qp); + Vp = sin(Q->BrA * u); + Up = (Vp * Q->cosgam + Sp * Q->singam) / Tp; + if (fabs(fabs(Up) - 1.) < EPS) { + lp.lam = 0.; + lp.phi = Up < 0. ? -M_HALFPI : M_HALFPI; + } else { + lp.phi = Q->E / sqrt((1. + Up) / (1. - Up)); + if ((lp.phi = pj_phi2(P->ctx, pow(lp.phi, 1. / Q->B), P->e)) == HUGE_VAL) + I_ERROR; + lp.lam = - Q->rB * atan2((Sp * Q->cosgam - + Vp * Q->singam), cos(Q->BrA * u)); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(omerc) { + double con, com, cosph0, D, F, H, L, sinph0, p, J, gamma=0, + gamma0, lamc=0, lam1=0, lam2=0, phi1=0, phi2=0, alpha_c=0; + int alp, gam, no_off = 0; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->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; + if( no_off ) + { + /* Mark the parameter as used, so that the pj_get_def() return them */ + pj_param(P->ctx, P->params, "sno_uoff"); + pj_param(P->ctx, P->params, "sno_off"); + } + } else { + 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 - M_HALFPI) <= TOL || + fabs(fabs(P->phi0) - M_HALFPI) <= TOL || + fabs(fabs(phi2) - M_HALFPI) <= TOL) E_ERROR(-33); + } + com = sqrt(P->one_es); + if (fabs(P->phi0) > EPS) { + sinph0 = sin(P->phi0); + cosph0 = cos(P->phi0); + con = 1. - P->es * sinph0 * sinph0; + Q->B = cosph0 * cosph0; + Q->B = sqrt(1. + P->es * Q->B * Q->B / P->one_es); + Q->A = Q->B * P->k0 * com / con; + D = Q->B * com / (cosph0 * sqrt(con)); + if ((F = D * D - 1.) <= 0.) + F = 0.; + else { + F = sqrt(F); + if (P->phi0 < 0.) + F = -F; + } + Q->E = F += D; + Q->E *= pow(pj_tsfn(P->phi0, sinph0, P->e), Q->B); + } else { + Q->B = 1. / com; + Q->A = P->k0; + Q->E = D = F = 1.; + } + 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 - M_PI) <= TOL || + fabs(fabs(P->phi0) - M_HALFPI) <= TOL) + E_ERROR(-32); + P->lam0 = lamc - asin(.5 * (F - 1. / F) * + tan(gamma0)) / Q->B; + } else { + H = pow(pj_tsfn(phi1, sin(phi1), P->e), Q->B); + L = pow(pj_tsfn(phi2, sin(phi2), P->e), Q->B); + F = Q->E / H; + p = (L - H) / (L + H); + J = Q->E * Q->E; + J = (J - L * H) / (J + L * H); + if ((con = lam1 - lam2) < -M_PI) + lam2 -= M_TWOPI; + else if (con > M_PI) + lam2 += M_TWOPI; + P->lam0 = adjlon(.5 * (lam1 + lam2) - atan( + J * tan(.5 * Q->B * (lam1 - lam2)) / p) / Q->B); + gamma0 = atan(2. * sin(Q->B * adjlon(lam1 - P->lam0)) / + (F - 1. / F)); + gamma = alpha_c = asin(D * sin(gamma0)); + } + Q->singam = sin(gamma0); + Q->cosgam = cos(gamma0); + Q->sinrot = sin(gamma); + Q->cosrot = cos(gamma); + Q->BrA = 1. / (Q->ArB = Q->A * (Q->rB = 1. / Q->B)); + Q->AB = Q->A * Q->B; + if (no_off) + Q->u_0 = 0; + else { + Q->u_0 = fabs(Q->ArB * atan2(sqrt(D * D - 1.), cos(alpha_c))); + if (P->phi0 < 0.) + Q->u_0 = - Q->u_0; + } + F = 0.5 * gamma0; + Q->v_pole_n = Q->ArB * log(tan(M_FORTPI - F)); + Q->v_pole_s = Q->ArB * log(tan(M_FORTPI + F)); + P->inv = e_inverse; + P->fwd = e_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_omerc_selftest (void) {return 0;} +#else + +int pj_omerc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=omerc +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222650.796885261341, 110642.229314983808}, + { 222650.796885261341, -110642.229314983808}, + {-222650.796885261545, 110642.229314983808}, + {-222650.796885261545, -110642.229314983808}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179663056816996357, 0.000904369474808157338}, + { 0.00179663056816996357, -0.000904369474820879583}, + {-0.0017966305681604536, 0.000904369474808157338}, + {-0.0017966305681604536, -0.000904369474820879583}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_ortho.c b/proj4/src/PJ_ortho.c new file mode 100644 index 000000000000..a6527e7245cc --- /dev/null +++ b/proj4/src/PJ_ortho.c @@ -0,0 +1,174 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph."; + +struct pj_opaque { + double sinph0; + double cosph0; + int mode; +}; + +#define EPS10 1.e-10 +#define N_POLE 0 +#define S_POLE 1 +#define EQUIT 2 +#define OBLIQ 3 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, cosphi, sinphi; + + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + switch (Q->mode) { + case EQUIT: + if (cosphi * coslam < - EPS10) F_ERROR; + xy.y = sin(lp.phi); + break; + case OBLIQ: + if (Q->sinph0 * (sinphi = sin(lp.phi)) + + Q->cosph0 * cosphi * coslam < - EPS10) F_ERROR; + xy.y = Q->cosph0 * sinphi - Q->sinph0 * cosphi * coslam; + break; + case N_POLE: + coslam = - coslam; + case S_POLE: + if (fabs(lp.phi - P->phi0) - EPS10 > M_HALFPI) F_ERROR; + xy.y = cosphi * coslam; + break; + } + xy.x = cosphi * sin(lp.lam); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rh, cosc, sinc; + + if ((sinc = (rh = hypot(xy.x, xy.y))) > 1.) { + if ((sinc - 1.) > EPS10) I_ERROR; + sinc = 1.; + } + cosc = sqrt(1. - sinc * sinc); /* in this range OK */ + if (fabs(rh) <= EPS10) { + lp.phi = P->phi0; + lp.lam = 0.0; + } else { + switch (Q->mode) { + case N_POLE: + xy.y = -xy.y; + lp.phi = acos(sinc); + break; + case S_POLE: + lp.phi = - acos(sinc); + break; + case EQUIT: + lp.phi = xy.y * sinc / rh; + xy.x *= sinc; + xy.y = cosc * rh; + goto sinchk; + case OBLIQ: + lp.phi = cosc * Q->sinph0 + xy.y * sinc * Q->cosph0 /rh; + xy.y = (cosc - Q->sinph0 * lp.phi) * rh; + xy.x *= sinc * Q->cosph0; + sinchk: + if (fabs(lp.phi) >= 1.) + lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + else + lp.phi = asin(lp.phi); + break; + } + lp.lam = (xy.y == 0. && (Q->mode == OBLIQ || Q->mode == EQUIT)) + ? (xy.x == 0. ? 0. : xy.x < 0. ? -M_HALFPI : M_HALFPI) + : atan2(xy.x, xy.y); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(ortho) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (fabs(fabs(P->phi0) - M_HALFPI) <= EPS10) + Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; + else if (fabs(P->phi0) > EPS10) { + Q->mode = OBLIQ; + Q->sinph0 = sin(P->phi0); + Q->cosph0 = cos(P->phi0); + } else + Q->mode = EQUIT; + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_ortho_selftest (void) {return 0;} +#else + +int pj_ortho_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=ortho +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223322.76057672748, 111695.401198614476}, + { 223322.76057672748, -111695.401198614476}, + {-223322.76057672748, 111695.401198614476}, + {-223322.76057672748, -111695.401198614476}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931102938101, 0.000895246554928338998}, + { 0.0017904931102938101, -0.000895246554928338998}, + {-0.0017904931102938101, 0.000895246554928338998}, + {-0.0017904931102938101, -0.000895246554928338998}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_patterson.c b/proj4/src/PJ_patterson.c new file mode 100644 index 000000000000..50ca098132a2 --- /dev/null +++ b/proj4/src/PJ_patterson.c @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2014 Bojan Savric + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * The Patterson Cylindrical projection was designed by Tom Patterson, US National + * Park Service, in 2014, using Flex Projector. The polynomial equations for the + * projection were developed by Bojan Savric, Oregon State University, in + * collaboration with Tom Patterson and Bernhard Jenny, Oregon State University. + * + * Java reference algorithm implemented by Bojan Savric in Java Map Projection + * Library (a Java port of PROJ.4) in the file PattersonProjection.java. + * + * References: + * Java Map Projection Library + * https://github.com/OSUCartography/JMapProjLib + * + * Patterson Cylindrical Projection + * http://shadedrelief.com/patterson/ + * + * Patterson, T., Savric, B., and Jenny, B. (2015). Cartographic Perspectives + * (No.78). Describes the projection design and characteristics, and + * developing the equations. doi:10.14714/CP78.1270 + * http://dx.doi.org/10.14714/CP78.1270 + * + * Port to PROJ.4 by Micah Cochran, 26 March 2016 + */ + +#define PJ_LIB__ +#include + +PROJ_HEAD(patterson, "Patterson Cylindrical") "\n\tCyl."; + +#define K1 1.0148 +#define K2 0.23185 +#define K3 -0.14499 +#define K4 0.02406 +#define C1 K1 +#define C2 (5.0 * K2) +#define C3 (7.0 * K3) +#define C4 (9.0 * K4) +#define EPS11 1.0e-11 +#define MAX_Y 1.790857183 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double phi2; + (void) P; + + phi2 = lp.phi * lp.phi; + xy.x = lp.lam; + xy.y = lp.phi * (K1 + phi2 * phi2 * (K2 + phi2 * (K3 + K4 * phi2))); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double yc, tol, y2, f, fder; + (void) P; + + yc = xy.y; + + /* 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; + } + + for (;;) { /* Newton-Raphson */ + y2 = yc * yc; + f = (yc * (K1 + y2 * y2 * (K2 + y2 * (K3 + K4 * y2)))) - xy.y; + fder = C1 + y2 * y2 * (C2 + y2 * (C3 + C4 * y2)); + yc -= tol = f / fder; + if (fabs(tol) < EPS11) { + break; + } + } + lp.phi = yc; + + /* longitude */ + lp.lam = xy.x; + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(patterson) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_patterson_selftest (void) {return 0;} +#else + +int pj_patterson_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=patterson +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223402.144255274179, 113354.250397779804}, + {223402.144255274179, -113354.250397779804}, + {-223402.144255274179, 113354.250397779804}, + {-223402.144255274179, -113354.250397779804}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.00179049310978382265, 0.000882190140807953657}, + {0.00179049310978382265, -0.000882190140807953657}, + {-0.00179049310978382265, 0.000882190140807953657}, + {-0.00179049310978382265, -0.000882190140807953657}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_poly.c b/proj4/src/PJ_poly.c new file mode 100644 index 000000000000..e2ecdd894986 --- /dev/null +++ b/proj4/src/PJ_poly.c @@ -0,0 +1,217 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(poly, "Polyconic (American)") + "\n\tConic, Sph&Ell"; + +struct pj_opaque { + double ml0; \ + double *en; +}; + +#define TOL 1e-10 +#define CONV 1e-10 +#define N_ITER 10 +#define I_ITER 20 +#define ITOL 1.e-12 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double ms, sp, cp; + + if (fabs(lp.phi) <= TOL) { + xy.x = lp.lam; + xy.y = -Q->ml0; + } else { + sp = sin(lp.phi); + ms = fabs(cp = cos(lp.phi)) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.; + xy.x = ms * sin(lp.lam *= sp); + xy.y = (pj_mlfn(lp.phi, sp, cp, Q->en) - Q->ml0) + ms * (1. - cos(lp.lam)); + } + + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cot, E; + + if (fabs(lp.phi) <= TOL) { + xy.x = lp.lam; + xy.y = Q->ml0; + } else { + cot = 1. / tan(lp.phi); + xy.x = sin(E = lp.lam * sin(lp.phi)) * cot; + xy.y = lp.phi - P->phi0 + cot * (1. - cos(E)); + } + + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + xy.y += Q->ml0; + if (fabs(xy.y) <= TOL) { + lp.lam = xy.x; + lp.phi = 0.; + } else { + double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi; + int i; + + r = xy.y * xy.y + xy.x * xy.x; + for (lp.phi = xy.y, i = I_ITER; i ; --i) { + sp = sin(lp.phi); + s2ph = sp * ( cp = cos(lp.phi)); + if (fabs(cp) < ITOL) + I_ERROR; + c = sp * (mlp = sqrt(1. - P->es * sp * sp)) / cp; + ml = pj_mlfn(lp.phi, sp, cp, Q->en); + mlb = ml * ml + r; + mlp = P->one_es / (mlp * mlp * mlp); + lp.phi += ( dPhi = + ( ml + ml + c * mlb - 2. * xy.y * (c * ml + 1.) ) / ( + P->es * s2ph * (mlb - 2. * xy.y * ml) / c + + 2.* (xy.y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp )); + if (fabs(dPhi) <= ITOL) + break; + } + if (!i) + I_ERROR; + c = sin(lp.phi); + lp.lam = asin(xy.x * tan(lp.phi) * sqrt(1. - P->es * c * c)) / sin(lp.phi); + } + + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double B, dphi, tp; + int i; + + if (fabs(xy.y = P->phi0 + xy.y) <= TOL) { + lp.lam = xy.x; + lp.phi = 0.; + } else { + lp.phi = xy.y; + B = xy.x * xy.x + xy.y * xy.y; + i = N_ITER; + do { + tp = tan(lp.phi); + lp.phi -= (dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi - + .5 * ( lp.phi * lp.phi + B) * tp) / + ((lp.phi - xy.y) / tp - 1.)); + } while (fabs(dphi) > CONV && --i); + if (! i) I_ERROR; + lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi); + } + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + if (P->opaque->en) + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(poly) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (P->es) { + if (!(Q->en = pj_enfn(P->es))) E_ERROR_0; + Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); + P->inv = e_inverse; + P->fwd = e_forward; + } else { + Q->ml0 = -P->phi0; + P->inv = s_inverse; + P->fwd = s_forward; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_poly_selftest (void) {return 0;} +#else + +int pj_poly_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=poly +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=poly +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222605.285770237475, 110642.194561440483}, + { 222605.285770237475, -110642.194561440483}, + {-222605.285770237475, 110642.194561440483}, + {-222605.285770237475, -110642.194561440483}, + }; + + XY s_fwd_expect[] = { + { 223368.105210218986, 111769.110491224754}, + { 223368.105210218986, -111769.110491224754}, + {-223368.105210218986, 111769.110491224754}, + {-223368.105210218986, -111769.110491224754}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00179663056846135222, 0.000904369476631838518}, + { 0.00179663056846135222, -0.000904369476631838518}, + {-0.00179663056846135222, 0.000904369476631838518}, + {-0.00179663056846135222, -0.000904369476631838518}, + }; + + LP s_inv_expect[] = { + { 0.0017904931100023887, 0.000895246554454779222}, + { 0.0017904931100023887, -0.000895246554454779222}, + {-0.0017904931100023887, 0.000895246554454779222}, + {-0.0017904931100023887, -0.000895246554454779222}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_putp2.c b/proj4/src/PJ_putp2.c new file mode 100644 index 000000000000..052d95bbd12e --- /dev/null +++ b/proj4/src/PJ_putp2.c @@ -0,0 +1,115 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph."; + +#define C_x 1.89490 +#define C_y 1.71848 +#define C_p 0.6141848493043784 +#define EPS 1e-10 +#define NITER 10 +#define PI_DIV_3 1.0471975511965977 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double p, c, s, V; + int i; + (void) P; + + p = C_p * sin(lp.phi); + s = lp.phi * lp.phi; + lp.phi *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 ); + for (i = NITER; i ; --i) { + c = cos(lp.phi); + s = sin(lp.phi); + lp.phi -= V = (lp.phi + s * (c - 1.) - p) / + (1. + c * (c - 1.) - s * s); + if (fabs(V) < EPS) + break; + } + if (!i) + lp.phi = lp.phi < 0 ? - PI_DIV_3 : PI_DIV_3; + xy.x = C_x * lp.lam * (cos(lp.phi) - 0.5); + xy.y = C_y * sin(lp.phi); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double c; + + lp.phi = aasin(P->ctx,xy.y / C_y); + lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5)); + lp.phi = aasin(P->ctx,(lp.phi + sin(lp.phi) * (c - 1.)) / C_p); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(putp2) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_putp2_selftest (void) {return 0;} +#else + +int pj_putp2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp2 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 211638.039634339279, 117895.033043379764}, + { 211638.039634339279, -117895.033043379764}, + {-211638.039634339279, 117895.033043379764}, + {-211638.039634339279, -117895.033043379764}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00188980221640386672, 0.000848201580276863377}, + { 0.00188980221640386672, -0.000848201580276863377}, + {-0.00188980221640386672, 0.000848201580276863377}, + {-0.00188980221640386672, -0.000848201580276863377}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_putp3.c b/proj4/src/PJ_putp3.c new file mode 100644 index 000000000000..93720915e04f --- /dev/null +++ b/proj4/src/PJ_putp3.c @@ -0,0 +1,171 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double A; +}; + +PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl., Sph."; +PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl., Sph."; + +#define C 0.79788456 +#define RPISQ 0.1013211836 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + + xy.x = C * lp.lam * (1. - P->opaque->A * lp.phi * lp.phi); + xy.y = C * lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + + lp.phi = xy.y / C; + lp.lam = xy.x / (C * (1. - P->opaque->A * lp.phi * lp.phi)); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(putp3) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->A = 4. * RPISQ; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +PJ *PROJECTION(putp3p) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->A = 2. * RPISQ; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_putp3_selftest (void) {return 0;} +#else + +int pj_putp3_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp3 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 178227.115507793525, 89124.5607860879827}, + { 178227.115507793525, -89124.5607860879827}, + {-178227.115507793525, 89124.5607860879827}, + {-178227.115507793525, -89124.5607860879827}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00224405032986489889, 0.00112202516475805899}, + { 0.00224405032986489889, -0.00112202516475805899}, + {-0.00224405032986489889, 0.00112202516475805899}, + {-0.00224405032986489889, -0.00112202516475805899}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + + +#ifndef PJ_SELFTEST +int pj_putp3p_selftest (void) {return 0;} +#else + +int pj_putp3p_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp3p +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 178238.118539984745, 89124.5607860879827}, + { 178238.118539984745, -89124.5607860879827}, + {-178238.118539984745, 89124.5607860879827}, + {-178238.118539984745, -89124.5607860879827}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00224405032969050844, 0.00112202516475805899}, + { 0.00224405032969050844, -0.00112202516475805899}, + {-0.00224405032969050844, 0.00112202516475805899}, + {-0.00224405032969050844, -0.00112202516475805899}, + + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_putp4p.c b/proj4/src/PJ_putp4p.c new file mode 100644 index 000000000000..f8b65cee8d8f --- /dev/null +++ b/proj4/src/PJ_putp4p.c @@ -0,0 +1,177 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double C_x, C_y; +}; + +PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph."; +PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph."; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + lp.phi = aasin(P->ctx,0.883883476 * sin(lp.phi)); + xy.x = Q->C_x * lp.lam * cos(lp.phi); + xy.x /= cos(lp.phi *= 0.333333333333333); + xy.y = Q->C_y * sin(lp.phi); + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + lp.phi = aasin(P->ctx,xy.y / Q->C_y); + lp.lam = xy.x * cos(lp.phi) / Q->C_x; + lp.phi *= 3.; + lp.lam /= cos(lp.phi); + lp.phi = aasin(P->ctx,1.13137085 * sin(lp.phi)); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(putp4p) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = 0.874038744; + Q->C_y = 3.883251825; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +PJ *PROJECTION(weren) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = 1.; + Q->C_y = 4.442882938; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_putp4p_selftest (void) {return 0;} +#else + +int pj_putp4p_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp4p +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 195241.47734938623, 127796.782307926231}, + { 195241.47734938623, -127796.782307926231}, + {-195241.47734938623, 127796.782307926231}, + {-195241.47734938623, -127796.782307926231}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00204852830860296001, 0.000782480174932193733}, + { 0.00204852830860296001, -0.000782480174932193733}, + {-0.00204852830860296001, 0.000782480174932193733}, + {-0.00204852830860296001, -0.000782480174932193733}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif + + +#ifndef PJ_SELFTEST +int pj_weren_selftest (void) {return 0;} +#else + +int pj_weren_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=weren +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223378.515757633519, 146214.093042288267}, + { 223378.515757633519, -146214.093042288267}, + {-223378.515757633519, 146214.093042288267}, + {-223378.515757633519, -146214.093042288267}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00179049310987240413, 0.000683917989676492265}, + { 0.00179049310987240413, -0.000683917989676492265}, + {-0.00179049310987240413, 0.000683917989676492265}, + {-0.00179049310987240413, -0.000683917989676492265}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_putp5.c b/proj4/src/PJ_putp5.c new file mode 100644 index 000000000000..87b7af74a73b --- /dev/null +++ b/proj4/src/PJ_putp5.c @@ -0,0 +1,172 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double A, B; +}; + +PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl., Sph."; +PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl., Sph."; + +#define C 1.01346 +#define D 1.2158542 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + xy.x = C * lp.lam * (Q->A - Q->B * sqrt(1. + D * lp.phi * lp.phi)); + xy.y = C * lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + + lp.phi = xy.y / C; + lp.lam = xy.x / (C * (Q->A - Q->B * sqrt(1. + D * lp.phi * lp.phi))); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(putp5) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->A = 2.; + Q->B = 1.; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +PJ *PROJECTION(putp5p) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->A = 1.5; + Q->B = 0.5; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + +#ifndef PJ_SELFTEST +int pj_putp5_selftest (void) {return 0;} +#else + +int pj_putp5_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp5 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 226367.21338056153, 113204.56855847509}, + { 226367.21338056153, -113204.56855847509}, + {-226367.21338056153, 113204.56855847509}, + {-226367.21338056153, -113204.56855847509}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00176671315102969553, 0.000883356575387199546}, + { 0.00176671315102969553, -0.000883356575387199546}, + {-0.00176671315102969553, 0.000883356575387199546}, + {-0.00176671315102969553, -0.000883356575387199546}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_putp5p_selftest (void) {return 0;} +#else + +int pj_putp5p_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp5p +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 226388.175248755841, 113204.56855847509}, + { 226388.175248755841, -113204.56855847509}, + {-226388.175248755841, 113204.56855847509}, + {-226388.175248755841, -113204.56855847509}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00176671315090204742, 0.000883356575387199546}, + { 0.00176671315090204742, -0.000883356575387199546}, + {-0.00176671315090204742, 0.000883356575387199546}, + {-0.00176671315090204742, -0.000883356575387199546}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif diff --git a/proj4/src/PJ_putp6.c b/proj4/src/PJ_putp6.c new file mode 100644 index 000000000000..6c4fc2465442 --- /dev/null +++ b/proj4/src/PJ_putp6.c @@ -0,0 +1,196 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double C_x, C_y, A, B, D; +}; + +PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl., Sph."; +PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl., Sph."; + +#define EPS 1e-10 +#define NITER 10 +#define CON_POLE 1.732050807568877 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double p, r, V; + int i; + + p = Q->B * sin(lp.phi); + lp.phi *= 1.10265779; + for (i = NITER; i ; --i) { + r = sqrt(1. + lp.phi * lp.phi); + lp.phi -= V = ( (Q->A - r) * lp.phi - log(lp.phi + r) - p ) / + (Q->A - 2. * r); + if (fabs(V) < EPS) + break; + } + if (!i) + lp.phi = p < 0. ? -CON_POLE : CON_POLE; + xy.x = Q->C_x * lp.lam * (Q->D - sqrt(1. + lp.phi * lp.phi)); + xy.y = Q->C_y * lp.phi; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double r; + + lp.phi = xy.y / Q->C_y; + r = sqrt(1. + lp.phi * lp.phi); + lp.lam = xy.x / (Q->C_x * (Q->D - r)); + lp.phi = aasin( P->ctx, ( (Q->A - r) * lp.phi - log(lp.phi + r) ) / Q->B); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(putp6) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = 1.01346; + Q->C_y = 0.91910; + Q->A = 4.; + Q->B = 2.1471437182129378784; + Q->D = 2.; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +PJ *PROJECTION(putp6p) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->C_x = 0.44329; + Q->C_y = 0.80404; + Q->A = 6.; + Q->B = 5.61125; + Q->D = 3.; + + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_putp6_selftest (void) {return 0;} +#else + +int pj_putp6_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp6 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 226369.395133402577, 110218.523796520662}, + { 226369.395133402577, -110218.523796520749}, + {-226369.395133402577, 110218.523796520662}, + {-226369.395133402577, -110218.523796520749}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00176671315102969921, 0.000907295534210503544}, + { 0.00176671315102969921, -0.000907295534205924308}, + {-0.00176671315102969921, 0.000907295534210503544}, + {-0.00176671315102969921, -0.000907295534205924308}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif + + +#ifndef PJ_SELFTEST +int pj_putp6p_selftest (void) {return 0;} +#else + +int pj_putp6p_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=putp6p +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 198034.195132195076, 125989.475461323193}, + { 198034.195132195076, -125989.475461323193}, + {-198034.195132195076, 125989.475461323193}, + {-198034.195132195076, -125989.475461323193}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.00201955053120177067, 0.000793716441164738612}, + { 0.00201955053120177067, -0.000793716441164738612}, + {-0.00201955053120177067, 0.000793716441164738612}, + {-0.00201955053120177067, -0.000793716441164738612}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + +#endif diff --git a/proj4/src/PJ_qsc.c b/proj4/src/PJ_qsc.c new file mode 100644 index 000000000000..2777736b92b5 --- /dev/null +++ b/proj4/src/PJ_qsc.c @@ -0,0 +1,471 @@ +/* + * This implements the Quadrilateralized Spherical Cube (QSC) projection. + * + * Copyright (c) 2011, 2012 Martin Lambers + * + * The QSC projection was introduced in: + * [OL76] + * E.M. O'Neill and R.E. Laubscher, "Extended Studies of a Quadrilateralized + * Spherical Cube Earth Data Base", Naval Environmental Prediction Research + * Facility Tech. Report NEPRF 3-76 (CSC), May 1976. + * + * The preceding shift from an ellipsoid to a sphere, which allows to apply + * this projection to ellipsoids as used in the Ellipsoidal Cube Map model, + * is described in + * [LK12] + * M. Lambers and A. Kolb, "Ellipsoidal Cube Maps for Accurate Rendering of + * Planetary-Scale Terrain Data", Proc. Pacfic Graphics (Short Papers), Sep. + * 2012 + * + * You have to choose one of the following projection centers, + * corresponding to the centers of the six cube faces: + * phi0 = 0.0, lam0 = 0.0 ("front" face) + * phi0 = 0.0, lam0 = 90.0 ("right" face) + * phi0 = 0.0, lam0 = 180.0 ("back" face) + * phi0 = 0.0, lam0 = -90.0 ("left" face) + * phi0 = 90.0 ("top" face) + * phi0 = -90.0 ("bottom" face) + * Other projection centers will not work! + * + * In the projection code below, each cube face is handled differently. + * See the computation of the face parameter in the PROJECTION(qsc) function + * and the handling of different face values (FACE_*) in the forward and + * inverse projections. + * + * Furthermore, the projection is originally only defined for theta angles + * between (-1/4 * PI) and (+1/4 * PI) on the current cube face. This area + * of definition is named AREA_0 in the projection code below. The other + * three areas of a cube face are handled by rotation of AREA_0. + */ + +#define PJ_LIB__ +#include + +struct pj_opaque { + int face; + double a_squared; + double b; + double one_minus_f; + double one_minus_f_squared; +}; +PROJ_HEAD(qsc, "Quadrilateralized Spherical Cube") "\n\tAzi, Sph."; + +#define EPS10 1.e-10 + +/* The six cube faces. */ +#define FACE_FRONT 0 +#define FACE_RIGHT 1 +#define FACE_BACK 2 +#define FACE_LEFT 3 +#define FACE_TOP 4 +#define FACE_BOTTOM 5 + +/* The four areas on a cube face. AREA_0 is the area of definition, + * the other three areas are counted counterclockwise. */ +#define AREA_0 0 +#define AREA_1 1 +#define AREA_2 2 +#define AREA_3 3 + +/* Helper function for forward projection: compute the theta angle + * and determine the area number. */ +static double qsc_fwd_equat_face_theta(double phi, double y, double x, int *area) { + double theta; + if (phi < EPS10) { + *area = AREA_0; + theta = 0.0; + } else { + theta = atan2(y, x); + if (fabs(theta) <= M_FORTPI) { + *area = AREA_0; + } else if (theta > M_FORTPI && theta <= M_HALFPI + M_FORTPI) { + *area = AREA_1; + theta -= M_HALFPI; + } else if (theta > M_HALFPI + M_FORTPI || theta <= -(M_HALFPI + M_FORTPI)) { + *area = AREA_2; + theta = (theta >= 0.0 ? theta - M_PI : theta + M_PI); + } else { + *area = AREA_3; + theta += M_HALFPI; + } + } + return theta; +} + +/* Helper function: shift the longitude. */ +static double qsc_shift_lon_origin(double lon, double offset) { + double slon = lon + offset; + if (slon < -M_PI) { + slon += M_TWOPI; + } else if (slon > +M_PI) { + slon -= M_TWOPI; + } + return slon; +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double lat, lon; + double theta, phi; + double t, mu; /* nu; */ + int area; + + /* Convert the geodetic latitude to a geocentric latitude. + * This corresponds to the shift from the ellipsoid to the sphere + * described in [LK12]. */ + if (P->es) { + lat = atan(Q->one_minus_f_squared * tan(lp.phi)); + } else { + lat = lp.phi; + } + + /* Convert the input lat, lon into theta, phi as used by QSC. + * This depends on the cube face and the area on it. + * For the top and bottom face, we can compute theta and phi + * directly from phi, lam. For the other faces, we must use + * unit sphere cartesian coordinates as an intermediate step. */ + lon = lp.lam; + if (Q->face == FACE_TOP) { + phi = M_HALFPI - lat; + if (lon >= M_FORTPI && lon <= M_HALFPI + M_FORTPI) { + area = AREA_0; + theta = lon - M_HALFPI; + } else if (lon > M_HALFPI + M_FORTPI || lon <= -(M_HALFPI + M_FORTPI)) { + area = AREA_1; + theta = (lon > 0.0 ? lon - M_PI : lon + M_PI); + } else if (lon > -(M_HALFPI + M_FORTPI) && lon <= -M_FORTPI) { + area = AREA_2; + theta = lon + M_HALFPI; + } else { + area = AREA_3; + theta = lon; + } + } else if (Q->face == FACE_BOTTOM) { + phi = M_HALFPI + lat; + if (lon >= M_FORTPI && lon <= M_HALFPI + M_FORTPI) { + area = AREA_0; + theta = -lon + M_HALFPI; + } else if (lon < M_FORTPI && lon >= -M_FORTPI) { + area = AREA_1; + theta = -lon; + } else if (lon < -M_FORTPI && lon >= -(M_HALFPI + M_FORTPI)) { + area = AREA_2; + theta = -lon - M_HALFPI; + } else { + area = AREA_3; + theta = (lon > 0.0 ? -lon + M_PI : -lon - M_PI); + } + } else { + double q, r, s; + double sinlat, coslat; + double sinlon, coslon; + + if (Q->face == FACE_RIGHT) { + lon = qsc_shift_lon_origin(lon, +M_HALFPI); + } else if (Q->face == FACE_BACK) { + lon = qsc_shift_lon_origin(lon, +M_PI); + } else if (Q->face == FACE_LEFT) { + lon = qsc_shift_lon_origin(lon, -M_HALFPI); + } + sinlat = sin(lat); + coslat = cos(lat); + sinlon = sin(lon); + coslon = cos(lon); + q = coslat * coslon; + r = coslat * sinlon; + s = sinlat; + + if (Q->face == FACE_FRONT) { + phi = acos(q); + theta = qsc_fwd_equat_face_theta(phi, s, r, &area); + } else if (Q->face == FACE_RIGHT) { + phi = acos(r); + theta = qsc_fwd_equat_face_theta(phi, s, -q, &area); + } else if (Q->face == FACE_BACK) { + phi = acos(-q); + theta = qsc_fwd_equat_face_theta(phi, s, -r, &area); + } else if (Q->face == FACE_LEFT) { + phi = acos(-r); + theta = qsc_fwd_equat_face_theta(phi, s, q, &area); + } else { + /* Impossible */ + phi = theta = 0.0; + area = AREA_0; + } + } + + /* Compute mu and nu for the area of definition. + * For mu, see Eq. (3-21) in [OL76], but note the typos: + * compare with Eq. (3-14). For nu, see Eq. (3-38). */ + mu = atan((12.0 / M_PI) * (theta + acos(sin(theta) * cos(M_FORTPI)) - M_HALFPI)); + t = sqrt((1.0 - cos(phi)) / (cos(mu) * cos(mu)) / (1.0 - cos(atan(1.0 / cos(theta))))); + /* nu = atan(t); We don't really need nu, just t, see below. */ + + /* Apply the result to the real area. */ + if (area == AREA_1) { + mu += M_HALFPI; + } else if (area == AREA_2) { + mu += M_PI; + } else if (area == AREA_3) { + mu += M_PI_HALFPI; + } + + /* Now compute x, y from mu and nu */ + /* t = tan(nu); */ + xy.x = t * cos(mu); + xy.y = t * sin(mu); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double mu, nu, cosmu, tannu; + double tantheta, theta, cosphi, phi; + double t; + int area; + + /* Convert the input x, y to the mu and nu angles as used by QSC. + * This depends on the area of the cube face. */ + nu = atan(sqrt(xy.x * xy.x + xy.y * xy.y)); + mu = atan2(xy.y, xy.x); + if (xy.x >= 0.0 && xy.x >= fabs(xy.y)) { + area = AREA_0; + } else if (xy.y >= 0.0 && xy.y >= fabs(xy.x)) { + area = AREA_1; + mu -= M_HALFPI; + } else if (xy.x < 0.0 && -xy.x >= fabs(xy.y)) { + area = AREA_2; + mu = (mu < 0.0 ? mu + M_PI : mu - M_PI); + } else { + area = AREA_3; + mu += M_HALFPI; + } + + /* Compute phi and theta for the area of definition. + * The inverse projection is not described in the original paper, but some + * good hints can be found here (as of 2011-12-14): + * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302 + * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */ + t = (M_PI / 12.0) * tan(mu); + tantheta = sin(t) / (cos(t) - (1.0 / sqrt(2.0))); + theta = atan(tantheta); + cosmu = cos(mu); + tannu = tan(nu); + cosphi = 1.0 - cosmu * cosmu * tannu * tannu * (1.0 - cos(atan(1.0 / cos(theta)))); + if (cosphi < -1.0) { + cosphi = -1.0; + } else if (cosphi > +1.0) { + cosphi = +1.0; + } + + /* Apply the result to the real area on the cube face. + * For the top and bottom face, we can compute phi and lam directly. + * For the other faces, we must use unit sphere cartesian coordinates + * as an intermediate step. */ + if (Q->face == FACE_TOP) { + phi = acos(cosphi); + lp.phi = M_HALFPI - phi; + if (area == AREA_0) { + lp.lam = theta + M_HALFPI; + } else if (area == AREA_1) { + lp.lam = (theta < 0.0 ? theta + M_PI : theta - M_PI); + } else if (area == AREA_2) { + lp.lam = theta - M_HALFPI; + } else /* area == AREA_3 */ { + lp.lam = theta; + } + } else if (Q->face == FACE_BOTTOM) { + phi = acos(cosphi); + lp.phi = phi - M_HALFPI; + if (area == AREA_0) { + lp.lam = -theta + M_HALFPI; + } else if (area == AREA_1) { + lp.lam = -theta; + } else if (area == AREA_2) { + lp.lam = -theta - M_HALFPI; + } else /* area == AREA_3 */ { + lp.lam = (theta < 0.0 ? -theta - M_PI : -theta + M_PI); + } + } else { + /* Compute phi and lam via cartesian unit sphere coordinates. */ + double q, r, s, t; + q = cosphi; + t = q * q; + if (t >= 1.0) { + s = 0.0; + } else { + s = sqrt(1.0 - t) * sin(theta); + } + t += s * s; + if (t >= 1.0) { + r = 0.0; + } else { + r = sqrt(1.0 - t); + } + /* Rotate q,r,s into the correct area. */ + if (area == AREA_1) { + t = r; + r = -s; + s = t; + } else if (area == AREA_2) { + r = -r; + s = -s; + } else if (area == AREA_3) { + t = r; + r = s; + s = -t; + } + /* Rotate q,r,s into the correct cube face. */ + if (Q->face == FACE_RIGHT) { + t = q; + q = -r; + r = t; + } else if (Q->face == FACE_BACK) { + q = -q; + r = -r; + } else if (Q->face == FACE_LEFT) { + t = q; + q = r; + r = -t; + } + /* Now compute phi and lam from the unit sphere coordinates. */ + lp.phi = acos(-s) - M_HALFPI; + lp.lam = atan2(r, q); + if (Q->face == FACE_RIGHT) { + lp.lam = qsc_shift_lon_origin(lp.lam, -M_HALFPI); + } else if (Q->face == FACE_BACK) { + lp.lam = qsc_shift_lon_origin(lp.lam, -M_PI); + } else if (Q->face == FACE_LEFT) { + lp.lam = qsc_shift_lon_origin(lp.lam, +M_HALFPI); + } + } + + /* Apply the shift from the sphere to the ellipsoid as described + * in [LK12]. */ + if (P->es) { + int invert_sign; + double tanphi, xa; + invert_sign = (lp.phi < 0.0 ? 1 : 0); + tanphi = tan(lp.phi); + xa = Q->b / sqrt(tanphi * tanphi + Q->one_minus_f_squared); + lp.phi = atan(sqrt(P->a * P->a - xa * xa) / (Q->one_minus_f * xa)); + if (invert_sign) { + lp.phi = -lp.phi; + } + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(qsc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + P->inv = e_inverse; + P->fwd = e_forward; + /* Determine the cube face from the center of projection. */ + if (P->phi0 >= M_HALFPI - M_FORTPI / 2.0) { + Q->face = FACE_TOP; + } else if (P->phi0 <= -(M_HALFPI - M_FORTPI / 2.0)) { + Q->face = FACE_BOTTOM; + } else if (fabs(P->lam0) <= M_FORTPI) { + Q->face = FACE_FRONT; + } else if (fabs(P->lam0) <= M_HALFPI + M_FORTPI) { + Q->face = (P->lam0 > 0.0 ? FACE_RIGHT : FACE_LEFT); + } else { + Q->face = FACE_BACK; + } + /* Fill in useful values for the ellipsoid <-> sphere shift + * described in [LK12]. */ + if (P->es) { + Q->a_squared = P->a * P->a; + Q->b = P->a * sqrt(1.0 - P->es); + Q->one_minus_f = 1.0 - (P->a - Q->b) / P->a; + Q->one_minus_f_squared = Q->one_minus_f * Q->one_minus_f; + } + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_qsc_selftest (void) {return 0;} +#else + +int pj_qsc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=qsc +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=qsc +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 304638.450843852363, 164123.870923793991}, + { 304638.450843852363, -164123.870923793991}, + {-304638.450843852363, 164123.870923793962}, + {-304638.450843852421, -164123.870923793904}, + }; + + XY s_fwd_expect[] = { + { 305863.792402890511, 165827.722754715243}, + { 305863.792402890511, -165827.722754715243}, + {-305863.792402890511, 165827.722754715243}, + {-305863.792402890569, -165827.722754715156}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.00132134098471627126, 0.000610652900922527926}, + { 0.00132134098471627126, -0.000610652900922527926}, + {-0.00132134098471627126, 0.000610652900922527926}, + {-0.00132134098471627126, -0.000610652900922527926}, + }; + + LP s_inv_expect[] = { + { 0.00131682718763827234, 0.000604493198178676161}, + { 0.00131682718763827234, -0.000604493198178676161}, + {-0.00131682718763827234, 0.000604493198178676161}, + {-0.00131682718763827234, -0.000604493198178676161}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_robin.c b/proj4/src/PJ_robin.c new file mode 100644 index 000000000000..f69963135934 --- /dev/null +++ b/proj4/src/PJ_robin.c @@ -0,0 +1,196 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph."; + +#define V(C,z) (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))) +#define DV(C,z) (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)) + +/* +note: following terms based upon 5 deg. intervals in degrees. + +Some background on these coefficients is available at: + +http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039 +http://trac.osgeo.org/proj/ticket/113 +*/ + +struct COEFS { + float c0, c1, c2, c3; +}; + +static const struct COEFS X[] = { + {1, 2.2199e-17, -7.15515e-05, 3.1103e-06}, + {0.9986, -0.000482243, -2.4897e-05, -1.3309e-06}, + {0.9954, -0.00083103, -4.48605e-05, -9.86701e-07}, + {0.99, -0.00135364, -5.9661e-05, 3.6777e-06}, + {0.9822, -0.00167442, -4.49547e-06, -5.72411e-06}, + {0.973, -0.00214868, -9.03571e-05, 1.8736e-08}, + {0.96, -0.00305085, -9.00761e-05, 1.64917e-06}, + {0.9427, -0.00382792, -6.53386e-05, -2.6154e-06}, + {0.9216, -0.00467746, -0.00010457, 4.81243e-06}, + {0.8962, -0.00536223, -3.23831e-05, -5.43432e-06}, + {0.8679, -0.00609363, -0.000113898, 3.32484e-06}, + {0.835, -0.00698325, -6.40253e-05, 9.34959e-07}, + {0.7986, -0.00755338, -5.00009e-05, 9.35324e-07}, + {0.7597, -0.00798324, -3.5971e-05, -2.27626e-06}, + {0.7186, -0.00851367, -7.01149e-05, -8.6303e-06}, + {0.6732, -0.00986209, -0.000199569, 1.91974e-05}, + {0.6213, -0.010418, 8.83923e-05, 6.24051e-06}, + {0.5722, -0.00906601, 0.000182, 6.24051e-06}, + {0.5322, -0.00677797, 0.000275608, 6.24051e-06} +}; + +static const struct COEFS Y[] = { + {-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11}, + {0.062, 0.0124, -1.26793e-09, 4.22642e-10}, + {0.124, 0.0124, 5.07171e-09, -1.60604e-09}, + {0.186, 0.0123999, -1.90189e-08, 6.00152e-09}, + {0.248, 0.0124002, 7.10039e-08, -2.24e-08}, + {0.31, 0.0123992, -2.64997e-07, 8.35986e-08}, + {0.372, 0.0124029, 9.88983e-07, -3.11994e-07}, + {0.434, 0.0123893, -3.69093e-06, -4.35621e-07}, + {0.4958, 0.0123198, -1.02252e-05, -3.45523e-07}, + {0.5571, 0.0121916, -1.54081e-05, -5.82288e-07}, + {0.6176, 0.0119938, -2.41424e-05, -5.25327e-07}, + {0.6769, 0.011713, -3.20223e-05, -5.16405e-07}, + {0.7346, 0.0113541, -3.97684e-05, -6.09052e-07}, + {0.7903, 0.0109107, -4.89042e-05, -1.04739e-06}, + {0.8435, 0.0103431, -6.4615e-05, -1.40374e-09}, + {0.8936, 0.00969686, -6.4636e-05, -8.547e-06}, + {0.9394, 0.00840947, -0.000192841, -4.2106e-06}, + {0.9761, 0.00616527, -0.000256, -4.2106e-06}, + {1, 0.00328947, -0.000319159, -4.2106e-06} +}; + +#define FXC 0.8487 +#define FYC 1.3523 +#define C1 11.45915590261646417544 +#define RC1 0.08726646259971647884 +#define NODES 18 +#define ONEEPS 1.000001 +#define EPS 1e-8 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + int i; + double dphi; + (void) P; + + i = floor((dphi = fabs(lp.phi)) * C1); + if (i >= NODES) i = NODES - 1; + dphi = RAD_TO_DEG * (dphi - RC1 * i); + xy.x = V(X[i], dphi) * FXC * lp.lam; + xy.y = V(Y[i], dphi) * FYC; + if (lp.phi < 0.) xy.y = -xy.y; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + int i; + double t, t1; + struct COEFS T; + + lp.lam = xy.x / FXC; + lp.phi = fabs(xy.y / FYC); + if (lp.phi >= 1.) { /* simple pathologic cases */ + if (lp.phi > ONEEPS) I_ERROR + else { + lp.phi = xy.y < 0. ? -M_HALFPI : M_HALFPI; + lp.lam /= X[NODES].c0; + } + } else { /* general problem */ + /* in Y space, reduce to table interval */ + for (i = floor(lp.phi * NODES);;) { + if (Y[i].c0 > lp.phi) --i; + else if (Y[i+1].c0 <= lp.phi) ++i; + else break; + } + T = Y[i]; + /* first guess, linear interp */ + t = 5. * (lp.phi - T.c0)/(Y[i+1].c0 - T.c0); + /* make into root */ + T.c0 -= lp.phi; + for (;;) { /* Newton-Raphson reduction */ + t -= t1 = V(T,t) / DV(T,t); + if (fabs(t1) < EPS) + break; + } + lp.phi = (5 * i + t) * DEG_TO_RAD; + if (xy.y < 0.) lp.phi = -lp.phi; + lp.lam /= V(X[i], t); + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(robin) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_robin_selftest (void) {return 0;} +#else + +int pj_robin_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=robin +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 189588.423282507836, 107318.530350702888}, + { 189588.423282507836, -107318.530350702888}, + {-189588.423282507836, 107318.530350702888}, + {-189588.423282507836, -107318.530350702888}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.002109689065506131, 0.000931805533547745983}, + { 0.002109689065506131, -0.000931805533547745983}, + {-0.002109689065506131, 0.000931805533547745983}, + {-0.002109689065506131, -0.000931805533547745983}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_rpoly.c b/proj4/src/PJ_rpoly.c new file mode 100644 index 000000000000..d0ff83197700 --- /dev/null +++ b/proj4/src/PJ_rpoly.c @@ -0,0 +1,99 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + double phi1; + double fxa; + double fxb; + int mode; +}; + +PROJ_HEAD(rpoly, "Rectangular Polyconic") + "\n\tConic, Sph., no inv.\n\tlat_ts="; + +#define EPS 1e-9 + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double fa; + + if (Q->mode) + fa = tan(lp.lam * Q->fxb) * Q->fxa; + else + fa = 0.5 * lp.lam; + if (fabs(lp.phi) < EPS) { + xy.x = fa + fa; + xy.y = - P->phi0; + } else { + xy.y = 1. / tan(lp.phi); + xy.x = sin(fa = 2. * atan(fa * sin(lp.phi))) * xy.y; + xy.y = lp.phi - P->phi0 + (1. - cos(fa)) * xy.y; + } + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(rpoly) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if ((Q->mode = (Q->phi1 = fabs(pj_param(P->ctx, P->params, "rlat_ts").f)) > EPS)) { + Q->fxb = 0.5 * sin(Q->phi1); + Q->fxa = 0.5 / Q->fxb; + } + P->es = 0.; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_rpoly_selftest (void) {return 0;} +#else + +int pj_rpoly_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=rpoly +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223368.09830201423, 111769.110486991223}, + { 223368.09830201423, -111769.110486991223}, + {-223368.09830201423, 111769.110486991223}, + {-223368.09830201423, -111769.110486991223}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_sch.c b/proj4/src/PJ_sch.c new file mode 100644 index 000000000000..048224ec4d28 --- /dev/null +++ b/proj4/src/PJ_sch.c @@ -0,0 +1,268 @@ +/****************************************************************************** + * $Id$ + * + * Project: SCH Coordinate system + * Purpose: Implementation of SCH Coordinate system + * References : + * 1. Hensley. Scott. SCH Coordinates and various transformations. June 15, 2000. + * 2. Buckley, Sean Monroe. Radar interferometry measurement of land subsidence. 2000.. + * PhD Thesis. UT Austin. (Appendix) + * 3. Hensley, Scott, Elaine Chapin, and T. Michel. "Improved processing of AIRSAR + * data based on the GeoSAR processor." Airsar earth science and applications + * workshop, March. 2002. (http://airsar.jpl.nasa.gov/documents/workshop2002/papers/T3.pdf) + * + * Author: Piyush Agram (piyush.agram@jpl.nasa.gov) + * Copyright (c) 2015 California Institute of Technology. + * Government sponsorship acknowledged. + * + * NOTE: The SCH coordinate system is a sensor aligned coordinate system + * developed at JPL for radar mapping missions. Details pertaining to the + * coordinate system have been release in the public domain (see references above). + * This code is an independent implementation of the SCH coordinate system + * that conforms to the PROJ.4 conventions and uses the details presented in these + * publicly released documents. All credit for the development of the coordinate + * system and its use should be directed towards the original developers at JPL. + ****************************************************************************** + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + ****************************************************************************/ + +#define PJ_LIB__ +#include +#include "geocent.h" + +struct pj_opaque { + double plat; /*Peg Latitude */ + double plon; /*Peg Longitude*/ + double phdg; /*Peg heading */ + double h0; /*Average altitude */ + double transMat[9]; + double xyzoff[3]; + double rcurv; + GeocentricInfo sph; + GeocentricInfo elp_0; +}; + +PROJ_HEAD(sch, "Spherical Cross-track Height") "\n\tMisc\n\tplat_0 = ,plon_0 = , phdg_0 = ,[h_0 = ]"; + +static LPZ inverse3d(XYZ xyz, PJ *P) { + LPZ lpz = {0.0, 0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double temp[3]; + double pxyz[3]; + + /* Local lat,lon using radius */ + pxyz[0] = xyz.y * P->a / Q->rcurv; + pxyz[1] = xyz.x * P->a / Q->rcurv; + pxyz[2] = xyz.z; + + if( pj_Convert_Geodetic_To_Geocentric( &(Q->sph), pxyz[0], pxyz[1], pxyz[2], + temp, temp+1, temp+2) != 0) + I3_ERROR; + + /* Apply rotation */ + pxyz[0] = Q->transMat[0] * temp[0] + Q->transMat[1] * temp[1] + Q->transMat[2] * temp[2]; + pxyz[1] = Q->transMat[3] * temp[0] + Q->transMat[4] * temp[1] + Q->transMat[5] * temp[2]; + pxyz[2] = Q->transMat[6] * temp[0] + Q->transMat[7] * temp[1] + Q->transMat[8] * temp[2]; + + /* Apply offset */ + pxyz[0] += Q->xyzoff[0]; + pxyz[1] += Q->xyzoff[1]; + pxyz[2] += Q->xyzoff[2]; + + /* Convert geocentric coordinates to lat lon */ + pj_Convert_Geocentric_To_Geodetic( &(Q->elp_0), pxyz[0], pxyz[1], pxyz[2], + temp, temp+1, temp+2); + + + lpz.lam = temp[1] ; + lpz.phi = temp[0] ; + lpz.z = temp[2]; + +#if 0 + printf("INVERSE: \n"); + printf("XYZ: %f %f %f \n", xyz.x, xyz.y, xyz.z); + printf("LPZ: %f %f %f \n", lpz.lam, lpz.phi, lpz.z); +#endif + return lpz; +} + +static XYZ forward3d(LPZ lpz, PJ *P) { + XYZ xyz = {0.0, 0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double temp[3]; + double pxyz[3]; + + + /* Convert lat lon to geocentric coordinates */ + if( pj_Convert_Geodetic_To_Geocentric( &(Q->elp_0), lpz.phi, lpz.lam, lpz.z, + temp, temp+1, temp+2 ) != 0 ) + F3_ERROR; + + + /* Adjust for offset */ + temp[0] -= Q->xyzoff[0]; + temp[1] -= Q->xyzoff[1]; + temp[2] -= Q->xyzoff[2]; + + + /* Apply rotation */ + pxyz[0] = Q->transMat[0] * temp[0] + Q->transMat[3] * temp[1] + Q->transMat[6] * temp[2]; + pxyz[1] = Q->transMat[1] * temp[0] + Q->transMat[4] * temp[1] + Q->transMat[7] * temp[2]; + pxyz[2] = Q->transMat[2] * temp[0] + Q->transMat[5] * temp[1] + Q->transMat[8] * temp[2]; + + /* Convert to local lat,lon */ + pj_Convert_Geocentric_To_Geodetic( &(Q->sph), pxyz[0], pxyz[1], pxyz[2], + temp, temp+1, temp+2); + + + /* Scale by radius */ + xyz.x = temp[1] * Q->rcurv / P->a; + xyz.y = temp[0] * Q->rcurv / P->a; + xyz.z = temp[2]; + +#if 0 + printf("FORWARD: \n"); + printf("LPZ: %f %f %f \n", lpz.lam, lpz.phi, lpz.z); + printf("XYZ: %f %f %f \n", xyz.x, xyz.y, xyz.z); +#endif + return xyz; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +static PJ *setup(PJ *P) { /* general initialization */ + struct pj_opaque *Q = P->opaque; + double reast, rnorth; + double chdg, shdg; + double clt, slt; + double clo, slo; + double temp; + double pxyz[3]; + + temp = P->a * sqrt(1.0 - P->es); + + /* Setup original geocentric system */ + if ( pj_Set_Geocentric_Parameters(&(Q->elp_0), P->a, temp) != 0) + E_ERROR(-37); + + clt = cos(Q->plat); + slt = sin(Q->plat); + clo = cos(Q->plon); + slo = sin(Q->plon); + + /* Estimate the radius of curvature for given peg */ + temp = sqrt(1.0 - (P->es) * slt * slt); + reast = (P->a)/temp; + rnorth = (P->a) * (1.0 - (P->es))/pow(temp,3); + + chdg = cos(Q->phdg); + shdg = sin(Q->phdg); + + Q->rcurv = Q->h0 + (reast*rnorth)/(reast * chdg * chdg + rnorth * shdg * shdg); + +#if 0 + printf("North Radius: %f \n", rnorth); + printf("East Radius: %f \n", reast); + printf("Effective Radius: %f \n", Q->rcurv); +#endif + + /* Set up local sphere at the given peg point */ + if ( pj_Set_Geocentric_Parameters(&(Q->sph), Q->rcurv, Q->rcurv) != 0) + E_ERROR(-37); + + /* Set up the transformation matrices */ + Q->transMat[0] = clt * clo; + Q->transMat[1] = -shdg*slo - slt*clo * chdg; + Q->transMat[2] = slo*chdg - slt*clo*shdg; + Q->transMat[3] = clt*slo; + Q->transMat[4] = clo*shdg - slt*slo*chdg; + Q->transMat[5] = -clo*chdg - slt*slo*shdg; + Q->transMat[6] = slt; + Q->transMat[7] = clt*chdg; + Q->transMat[8] = clt*shdg; + + + if( pj_Convert_Geodetic_To_Geocentric( &(Q->elp_0), Q->plat, Q->plon, Q->h0, + pxyz, pxyz+1, pxyz+2 ) != 0 ) + { + E_ERROR(-14) + } + + + Q->xyzoff[0] = pxyz[0] - (Q->rcurv) * clt * clo; + Q->xyzoff[1] = pxyz[1] - (Q->rcurv) * clt * slo; + Q->xyzoff[2] = pxyz[2] - (Q->rcurv) * slt; + +#if 0 + printf("Offset: %f %f %f \n", Q->xyzoff[0], Q->xyzoff[1], Q->xyzoff[2]); +#endif + + P->fwd3d = forward3d; + P->inv3d = inverse3d; + return P; +} + + +PJ *PROJECTION(sch) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->h0 = 0.0; + + /* Check if peg latitude was defined */ + if (pj_param(P->ctx, P->params, "tplat_0").i) + Q->plat = pj_param(P->ctx, P->params, "rplat_0").f; + else + E_ERROR(-37); + + /* Check if peg longitude was defined */ + if (pj_param(P->ctx, P->params, "tplon_0").i) + Q->plon = pj_param(P->ctx, P->params, "rplon_0").f; + else + E_ERROR(-37); + + /* Check if peg latitude is defined */ + if (pj_param(P->ctx, P->params, "tphdg_0").i) + Q->phdg = pj_param(P->ctx, P->params, "rphdg_0").f; + else + E_ERROR(-37); + + + /* Check if average height was defined - If so read it in */ + if (pj_param(P->ctx, P->params, "th_0").i) + Q->h0 = pj_param(P->ctx, P->params, "dh_0").f; + + /* Completed reading in the projection parameters */ +#if 0 + printf("PSA: Lat = %f Lon = %f Hdg = %f \n", Q->plat, Q->plon, Q->phdg); +#endif + + return setup(P); +} + +/* Skipping sef-test since the test system is not capable of handling + * 3D coordinate systems for the time being. Relying on tests in ../nad/ + */ +int pj_sch_selftest (void) {return 0;} diff --git a/proj4/src/PJ_sconics.c b/proj4/src/PJ_sconics.c new file mode 100644 index 000000000000..df7fb661aebd --- /dev/null +++ b/proj4/src/PJ_sconics.c @@ -0,0 +1,695 @@ +#define PJ_LIB__ +#include + + +struct pj_opaque { + double n; + double rho_c; + double rho_0; + double sig; + double c1, c2; + int type; +}; + + +#define EULER 0 +#define MURD1 1 +#define MURD2 2 +#define MURD3 3 +#define PCONIC 4 +#define TISSOT 5 +#define VITK1 6 +#define EPS10 1.e-10 +#define EPS 1e-10 +#define LINE2 "\n\tConic, Sph\n\tlat_1= and lat_2=" + +PROJ_HEAD(euler, "Euler") LINE2; +PROJ_HEAD(murd1, "Murdoch I") LINE2; +PROJ_HEAD(murd2, "Murdoch II") LINE2; +PROJ_HEAD(murd3, "Murdoch III") LINE2; +PROJ_HEAD(pconic, "Perspective Conic") LINE2; +PROJ_HEAD(tissot, "Tissot") LINE2; +PROJ_HEAD(vitk1, "Vitkovsky I") LINE2; + + + +/* get common factors for simple conics */ +static int phi12(PJ *P, double *del) { + double p1, p2; + int err = 0; + + 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->ctx, P->params, "rlat_1").f; + p2 = pj_param(P->ctx, P->params, "rlat_2").f; + *del = 0.5 * (p2 - p1); + P->opaque->sig = 0.5 * (p2 + p1); + err = (fabs(*del) < EPS || fabs(P->opaque->sig) < EPS) ? -42 : 0; + *del = *del; + } + return err; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double rho; + + switch (Q->type) { + case MURD2: + rho = Q->rho_c + tan (Q->sig - lp.phi); + break; + case PCONIC: + rho = Q->c2 * (Q->c1 - tan (lp.phi - Q->sig)); + break; + default: + rho = Q->rho_c - lp.phi; + break; + } + + xy.x = rho * sin ( lp.lam *= Q->n ); + xy.y = Q->rho_0 - rho * cos (lp.lam); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, (and ellipsoidal?) inverse */ + LP lp = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double rho; + + rho = hypot (xy.x, xy.y = Q->rho_0 - xy.y); + if (Q->n < 0.) { + rho = - rho; + xy.x = - xy.x; + xy.y = - xy.y; + } + + lp.lam = atan2 (xy.x, xy.y) / Q->n; + + switch (Q->type) { + case PCONIC: + lp.phi = atan (Q->c1 - rho / Q->c2) + Q->sig; + break; + case MURD2: + lp.phi = Q->sig - atan(rho - Q->rho_c); + break; + default: + lp.phi = Q->rho_c - rho; + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ *setup(PJ *P, int type) { + double del, cs; + int i; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + Q->type = type; + + i = phi12 (P, &del); + if(i) + E_ERROR(i); + switch (Q->type) { + + case TISSOT: + Q->n = sin (Q->sig); + cs = cos (del); + Q->rho_c = Q->n / cs + cs / Q->n; + Q->rho_0 = sqrt ((Q->rho_c - 2 * sin (P->phi0)) / Q->n); + break; + + case MURD1: + Q->rho_c = sin(del)/(del * tan(Q->sig)) + Q->sig; + Q->rho_0 = Q->rho_c - P->phi0; + Q->n = sin(Q->sig); + break; + + case MURD2: + Q->rho_c = (cs = sqrt (cos (del))) / tan (Q->sig); + Q->rho_0 = Q->rho_c + tan (Q->sig - P->phi0); + Q->n = sin (Q->sig) * cs; + break; + + case MURD3: + Q->rho_c = del / (tan(Q->sig) * tan(del)) + Q->sig; + Q->rho_0 = Q->rho_c - P->phi0; + Q->n = sin (Q->sig) * sin (del) * tan (del) / (del * del); + break; + + case EULER: + Q->n = sin (Q->sig) * sin (del) / del; + del *= 0.5; + Q->rho_c = del / (tan (del) * tan (Q->sig)) + Q->sig; + Q->rho_0 = Q->rho_c - P->phi0; + break; + + case PCONIC: + Q->n = sin (Q->sig); + Q->c2 = cos (del); + Q->c1 = 1./tan (Q->sig); + if (fabs (del = P->phi0 - Q->sig) - EPS10 >= M_HALFPI) + E_ERROR(-43); + Q->rho_0 = Q->c2 * (Q->c1 - tan (del)); + break; + + case VITK1: + Q->n = (cs = tan (del)) * sin (Q->sig) / del; + Q->rho_c = del / (cs * tan (Q->sig)) + Q->sig; + Q->rho_0 = Q->rho_c - P->phi0; + break; + } + + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0; + return (P); +} + + +PJ *PROJECTION(euler) { + return setup(P, EULER); +} + + +PJ *PROJECTION(tissot) { + return setup(P, TISSOT); +} + + +PJ *PROJECTION(murd1) { + return setup(P, MURD1); +} + + +PJ *PROJECTION(murd2) { + return setup(P, MURD2); +} + + +PJ *PROJECTION(murd3) { + return setup(P, MURD3); +} + + +PJ *PROJECTION(pconic) { + return setup(P, PCONIC); +} + + +PJ *PROJECTION(vitk1) { + return setup(P, VITK1); +} + + +#ifndef PJ_SELFTEST +int pj_euler_selftest (void) {return 0;} +#else + +int pj_euler_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=euler +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=euler +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222597.63465910763, 111404.24054991946}, + {222767.16563187627, -111234.6764910177}, + {-222597.63465910763, 111404.24054991946}, + {-222767.16563187627, -111234.6764910177}, + }; + + XY s_fwd_expect[] = { + {223360.65559869423, 111786.11238979101}, + {223530.76769031584, -111615.96709862351}, + {-223360.65559869423, 111786.11238979101}, + {-223530.76769031584, -111615.96709862351}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017962807023075235, 0.0008983146697688839}, + {0.0017962794738334226, -0.00089831589842987965}, + {-0.0017962807023075235, 0.0008983146697688839}, + {-0.0017962794738334226, -0.00089831589842987965}, + }; + + LP s_inv_expect[] = { + {0.0017901444369360026, 0.00089524594522202015}, + {0.001790143216840731, -0.00089524716533368484}, + {-0.0017901444369360026, 0.00089524594522202015}, + {-0.001790143216840731, -0.00089524716533368484}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + + +#ifndef PJ_SELFTEST +int pj_murd1_selftest (void) {return 0;} +#else + +int pj_murd1_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=murd1 +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=murd1 +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222600.81347355421, 111404.24418054636}, + {222770.3492878644, -111234.6728566746}, + {-222600.81347355421, 111404.24418054636}, + {-222770.3492878644, -111234.6728566746}, + }; + + XY s_fwd_expect[] = { + {223363.84530949194, 111786.11603286299}, + {223533.96225925098, -111615.96345182261}, + {-223363.84530949194, 111786.11603286299}, + {-223533.96225925098, -111615.96345182261}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017962550410516366, 0.0008983146697688839}, + {0.0017962538125775522, -0.00089831589842987965}, + {-0.0017962550410516366, 0.0008983146697688839}, + {-0.0017962538125775522, -0.00089831589842987965}, + }; + + LP s_inv_expect[] = { + {0.0017901188633413715, 0.00089524594522202015}, + {0.0017901176432461162, -0.00089524716492657387}, + {-0.0017901188633413715, 0.00089524594522202015}, + {-0.0017901176432461162, -0.00089524716492657387}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + + + + + + + + + + +#ifndef PJ_SELFTEST +int pj_murd2_selftest (void) {return 0;} +#else + +int pj_murd2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=murd2 +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=murd2 +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222588.09975123021, 111426.14002741246}, + {222757.72626701824, -111341.43131750476}, + {-222588.09975123021, 111426.14002741246}, + {-222757.72626701824, -111341.43131750476}, + }; + + XY s_fwd_expect[] = { + {223351.08800702673, 111808.08693438848}, + {223521.2959691704, -111723.08785967289}, + {-223351.08800702673, 111808.08693438848}, + {-223521.2959691704, -111723.08785967289}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017963574947305447, 0.00089788747830845382}, + {0.0017963562661689487, -0.00089788809264252983}, + {-0.0017963574947305447, 0.00089788747830845382}, + {-0.0017963562661689487, -0.00089788809264252983}, + }; + + LP s_inv_expect[] = { + {0.0017902209670287586, 0.00089482021163422854}, + {0.0017902197468465887, -0.00089482082161134206}, + {-0.0017902209670287586, 0.00089482021163422854}, + {-0.0017902197468465887, -0.00089482082161134206}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + + + + + + +#ifndef PJ_SELFTEST +int pj_murd3_selftest (void) {return 0;} +#else + +int pj_murd3_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=murd3 +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=murd3 +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222600.81407757697, 111404.24660137216}, + {222770.35473389886, -111234.67043217793}, + {-222600.81407757697, 111404.24660137216}, + {-222770.35473389886, -111234.67043217793}, + }; + + XY s_fwd_expect[] = { + {223363.84591558515, 111786.11846198692}, + {223533.96772395336, -111615.96101901523}, + {-223363.84591558515, 111786.11846198692}, + {-223533.96772395336, -111615.96101901523}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017962550166583809, 0.0008983146697688839}, + {0.0017962537881492445, -0.00089831589842987965}, + {-0.0017962550166583809, 0.0008983146697688839}, + {-0.0017962537881492445, -0.00089831589842987965}, + }; + + LP s_inv_expect[] = { + {0.0017901188390313859, 0.00089524594522202015}, + {0.0017901176189013177, -0.00089524716533368484}, + {-0.0017901188390313859, 0.00089524594522202015}, + {-0.0017901176189013177, -0.00089524716533368484}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + + + + + + + +#ifndef PJ_SELFTEST +int pj_pconic_selftest (void) {return 0;} +#else + +int pj_pconic_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=pconic +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=pconic +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222588.09884161691, 111416.60477006658}, + {222757.71809109033, -111331.88153107995}, + {-222588.09884161691, 111416.60477006658}, + {-222757.71809109033, -111331.88153107995}, + }; + + XY s_fwd_expect[] = { + {223351.08709429545, 111798.5189920546}, + {223521.28776521701, -111713.50533845725}, + {-223351.08709429545, 111798.5189920546}, + {-223521.28776521701, -111713.50533845725}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017963575313784969, 0.0008979644089172499}, + {0.0017963563027642206, -0.00089796502355327969}, + {-0.0017963575313784969, 0.0008979644089172499}, + {-0.0017963563027642206, -0.00089796502355327969}, + }; + + LP s_inv_expect[] = { + {0.0017902210035514285, 0.0008948968793741558}, + {0.0017902197833169374, -0.00089489748965381963}, + {-0.0017902210035514285, 0.0008948968793741558}, + {-0.0017902197833169374, -0.00089489748965381963}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + + + + + + + + + + + +#ifndef PJ_SELFTEST +int pj_tissot_selftest (void) {return 0;} +#else + +int pj_tissot_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=tissot +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=tissot +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222641.07869963095, 54347.828487281469}, + {222810.61451394114, -168291.08854993948}, + {-222641.07869963095, 54347.828487281469}, + {-222810.61451394114, -168291.08854993948}, + }; + + XY s_fwd_expect[] = { + {223404.24855684943, 54534.122161157939}, + {223574.36550660848, -168867.95732352766}, + {-223404.24855684943, 54534.122161157939}, + {-223574.36550660848, -168867.95732352766}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017962807107425871, 0.51344495513064536}, + {0.0017962794822333915, 0.51164832456244658}, + {-0.0017962807107425871, 0.51344495513064536}, + {-0.0017962794822333915, 0.51164832456244658}, + }; + + LP s_inv_expect[] = { + {0.0017901444453421915, 0.51344188640609856}, + {0.001790143225212064, 0.51165139329554277}, + {-0.0017901444453421915, 0.51344188640609856}, + {-0.001790143225212064, 0.51165139329554277}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + + + + +#ifndef PJ_SELFTEST +int pj_vitk1_selftest (void) {return 0;} +#else + +int pj_vitk1_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=vitk1 +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=vitk1 +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222607.17121145778, 111404.25144243463}, + {222776.71670959776, -111234.66558744459}, + {-222607.17121145778, 111404.25144243463}, + {-222776.71670959776, -111234.66558744459}, + }; + + XY s_fwd_expect[] = { + {223370.22484047143, 111786.12331964359}, + {223540.3515072545, -111615.9561576751}, + {-223370.22484047143, 111786.12331964359}, + {-223540.3515072545, -111615.9561576751}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017962037198570686, 0.0008983146697688839}, + {0.0017962024913830157, -0.00089831589842987965}, + {-0.0017962037198570686, 0.0008983146697688839}, + {-0.0017962024913830157, -0.00089831589842987965}, + }; + + LP s_inv_expect[] = { + {0.0017900677174648159, 0.00089524594522202015}, + {0.0017900664973695916, -0.00089524716533368484}, + {-0.0017900677174648159, 0.00089524594522202015}, + {-0.0017900664973695916, -0.00089524716533368484}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_somerc.c b/proj4/src/PJ_somerc.c new file mode 100644 index 000000000000..22ee5f5ce7e4 --- /dev/null +++ b/proj4/src/PJ_somerc.c @@ -0,0 +1,165 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(somerc, "Swiss. Obl. Mercator") "\n\tCyl, Ell\n\tFor CH1903"; + +struct pj_opaque { + double K, c, hlf_e, kR, cosp0, sinp0; +}; + +#define EPS 1.e-10 +#define NITER 6 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0, 0.0}; + double phip, lamp, phipp, lampp, sp, cp; + struct pj_opaque *Q = P->opaque; + + sp = P->e * sin (lp.phi); + phip = 2.* atan ( exp ( Q->c * ( + log (tan (M_FORTPI + 0.5 * lp.phi)) - Q->hlf_e * log ((1. + sp)/(1. - sp))) + + Q->K)) - M_HALFPI; + lamp = Q->c * lp.lam; + cp = cos(phip); + phipp = aasin (P->ctx, Q->cosp0 * sin (phip) - Q->sinp0 * cp * cos (lamp)); + lampp = aasin (P->ctx, cp * sin (lamp) / cos (phipp)); + xy.x = Q->kR * lampp; + xy.y = Q->kR * log (tan (M_FORTPI + 0.5 * phipp)); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double phip, lamp, phipp, lampp, cp, esp, con, delp; + int i; + + phipp = 2. * (atan (exp (xy.y / Q->kR)) - M_FORTPI); + lampp = xy.x / Q->kR; + cp = cos (phipp); + phip = aasin (P->ctx, Q->cosp0 * sin (phipp) + Q->sinp0 * cp * cos (lampp)); + lamp = aasin (P->ctx, cp * sin (lampp) / cos (phip)); + con = (Q->K - log (tan (M_FORTPI + 0.5 * phip)))/Q->c; + for (i = NITER; i ; --i) { + esp = P->e * sin(phip); + delp = (con + log(tan(M_FORTPI + 0.5 * phip)) - Q->hlf_e * + log((1. + esp)/(1. - esp)) ) * + (1. - esp * esp) * cos(phip) * P->rone_es; + phip -= delp; + if (fabs(delp) < EPS) + break; + } + if (i) { + lp.phi = phip; + lp.lam = lamp / Q->c; + } else + I_ERROR + return (lp); +} + + +#if 0 +FREEUP; if (P) pj_dalloc(P); } +#endif + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(somerc) { + double cp, phip0, sp; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + Q->hlf_e = 0.5 * P->e; + cp = cos (P->phi0); + cp *= cp; + Q->c = sqrt (1 + P->es * cp * cp * P->rone_es); + sp = sin (P->phi0); + Q->cosp0 = cos( phip0 = aasin (P->ctx, Q->sinp0 = sp / Q->c) ); + sp *= P->e; + Q->K = log (tan (M_FORTPI + 0.5 * phip0)) - Q->c * ( + log (tan (M_FORTPI + 0.5 * P->phi0)) - Q->hlf_e * + log ((1. + sp) / (1. - sp))); + Q->kR = P->k0 * sqrt(P->one_es) / (1. - sp * sp); + P->inv = e_inverse; + P->fwd = e_forward; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_somerc_selftest (void) {return 0;} +#else + +int pj_somerc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=somerc +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=somerc +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222638.98158654713, 110579.96521824898}, + {222638.98158654713, -110579.96521825089}, + {-222638.98158654713, 110579.96521824898}, + {-222638.98158654713, -110579.96521825089}, + }; + + XY s_fwd_expect[] = { + {223402.14425527418, 111706.74357494408}, + {223402.14425527418, -111706.74357494518}, + {-223402.14425527418, 111706.74357494408}, + {-223402.14425527418, -111706.74357494518}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017966305682390426, 0.00090436947704129484}, + {0.0017966305682390426, -0.00090436947704377105}, + {-0.0017966305682390426, 0.00090436947704129484}, + {-0.0017966305682390426, -0.00090436947704377105}, + }; + + LP s_inv_expect[] = { + {0.0017904931097838226, 0.00089524655485801927}, + {0.0017904931097838226, -0.00089524655484529714}, + {-0.0017904931097838226, 0.00089524655485801927}, + {-0.0017904931097838226, -0.00089524655484529714}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_stere.c b/proj4/src/PJ_stere.c new file mode 100644 index 000000000000..cc1773da36f5 --- /dev/null +++ b/proj4/src/PJ_stere.c @@ -0,0 +1,409 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(stere, "Stereographic") "\n\tAzi, Sph&Ell\n\tlat_ts="; +PROJ_HEAD(ups, "Universal Polar Stereographic") "\n\tAzi, Sph&Ell\n\tsouth"; + + +struct pj_opaque { + double phits; + double sinX1; + double cosX1; + double akm1; + int mode; +}; + +#define sinph0 P->opaque->sinX1 +#define cosph0 P->opaque->cosX1 +#define EPS10 1.e-10 +#define TOL 1.e-8 +#define NITER 8 +#define CONV 1.e-10 +#define S_POLE 0 +#define N_POLE 1 +#define OBLIQ 2 +#define EQUIT 3 + +static double ssfn_ (double phit, double sinphi, double eccen) { + sinphi *= eccen; + return (tan (.5 * (M_HALFPI + phit)) * + pow ((1. - sinphi) / (1. + sinphi), .5 * eccen)); +} + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double coslam, sinlam, sinX = 0.0, cosX = 0.0, X, A, sinphi; + + coslam = cos (lp.lam); + sinlam = sin (lp.lam); + sinphi = sin (lp.phi); + if (Q->mode == OBLIQ || Q->mode == EQUIT) { + sinX = sin (X = 2. * atan(ssfn_(lp.phi, sinphi, P->e)) - M_HALFPI); + cosX = cos (X); + } + + switch (Q->mode) { + case OBLIQ: + A = Q->akm1 / (Q->cosX1 * (1. + Q->sinX1 * sinX + + Q->cosX1 * cosX * coslam)); + xy.y = A * (Q->cosX1 * sinX - Q->sinX1 * cosX * coslam); + goto xmul; /* but why not just xy.x = A * cosX; break; ? */ + + case EQUIT: + A = 2. * Q->akm1 / (1. + cosX * coslam); + xy.y = A * sinX; +xmul: + xy.x = A * cosX; + break; + + case S_POLE: + lp.phi = -lp.phi; + coslam = - coslam; + sinphi = -sinphi; + case N_POLE: + xy.x = Q->akm1 * pj_tsfn (lp.phi, sinphi, P->e); + xy.y = - xy.x * coslam; + break; + } + + xy.x = xy.x * sinlam; + return xy; +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double sinphi, cosphi, coslam, sinlam; + + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + coslam = cos(lp.lam); + sinlam = sin(lp.lam); + + switch (Q->mode) { + case EQUIT: + xy.y = 1. + cosphi * coslam; + goto oblcon; + case OBLIQ: + xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; +oblcon: + if (xy.y <= EPS10) F_ERROR; + xy.x = (xy.y = Q->akm1 / xy.y) * cosphi * sinlam; + xy.y *= (Q->mode == EQUIT) ? sinphi : + cosph0 * sinphi - sinph0 * cosphi * coslam; + break; + case N_POLE: + coslam = - coslam; + lp.phi = - lp.phi; + case S_POLE: + if (fabs (lp.phi - M_HALFPI) < TOL) F_ERROR; + xy.x = sinlam * ( xy.y = Q->akm1 * tan (M_FORTPI + .5 * lp.phi) ); + xy.y *= coslam; + break; + } + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0; + int i; + + rho = hypot (xy.x, xy.y); + + switch (Q->mode) { + case OBLIQ: + case EQUIT: + cosphi = cos ( tp = 2. * atan2 (rho * Q->cosX1 , Q->akm1) ); + sinphi = sin (tp); + if ( rho == 0.0 ) + phi_l = asin (cosphi * Q->sinX1); + else + phi_l = asin (cosphi * Q->sinX1 + (xy.y * sinphi * Q->cosX1 / rho)); + + tp = tan (.5 * (M_HALFPI + phi_l)); + xy.x *= sinphi; + xy.y = rho * Q->cosX1 * cosphi - xy.y * Q->sinX1* sinphi; + halfpi = M_HALFPI; + halfe = .5 * P->e; + break; + case N_POLE: + xy.y = -xy.y; + case S_POLE: + phi_l = M_HALFPI - 2. * atan (tp = - rho / Q->akm1); + halfpi = -M_HALFPI; + halfe = -.5 * P->e; + break; + } + + for (i = NITER; i--; phi_l = lp.phi) { + sinphi = P->e * sin(phi_l); + lp.phi = 2. * atan (tp * pow ((1.+sinphi)/(1.-sinphi), halfe)) - halfpi; + if (fabs (phi_l - lp.phi) < CONV) { + if (Q->mode == S_POLE) + lp.phi = -lp.phi; + lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2 (xy.x, xy.y); + return lp; + } + } + I_ERROR; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double c, rh, sinc, cosc; + + sinc = sin (c = 2. * atan ((rh = hypot (xy.x, xy.y)) / Q->akm1)); + cosc = cos (c); + lp.lam = 0.; + + switch (Q->mode) { + case EQUIT: + if (fabs (rh) <= EPS10) + lp.phi = 0.; + else + lp.phi = asin (xy.y * sinc / rh); + if (cosc != 0. || xy.x != 0.) + lp.lam = atan2 (xy.x * sinc, cosc * rh); + break; + case OBLIQ: + if (fabs (rh) <= EPS10) + lp.phi = P->phi0; + else + lp.phi = asin (cosc * sinph0 + xy.y * sinc * cosph0 / rh); + if ((c = cosc - sinph0 * sin (lp.phi)) != 0. || xy.x != 0.) + lp.lam = atan2 (xy.x * sinc * cosph0, c * rh); + break; + case N_POLE: + xy.y = -xy.y; + case S_POLE: + if (fabs (rh) <= EPS10) + lp.phi = P->phi0; + else + lp.phi = asin (Q->mode == S_POLE ? - cosc : cosc); + lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2 (xy.x, xy.y); + break; + } + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ *setup(PJ *P) { /* general initialization */ + double t; + struct pj_opaque *Q = P->opaque; + + if (fabs ((t = fabs (P->phi0)) - M_HALFPI) < EPS10) + Q->mode = P->phi0 < 0. ? S_POLE : N_POLE; + else + Q->mode = t > EPS10 ? OBLIQ : EQUIT; + Q->phits = fabs (Q->phits); + + if (P->es) { + double X; + + switch (Q->mode) { + case N_POLE: + case S_POLE: + if (fabs (Q->phits - M_HALFPI) < EPS10) + Q->akm1 = 2. * P->k0 / + sqrt (pow (1+P->e,1+P->e) * pow (1-P->e,1-P->e)); + else { + Q->akm1 = cos (Q->phits) / + pj_tsfn (Q->phits, t = sin (Q->phits), P->e); + t *= P->e; + Q->akm1 /= sqrt(1. - t * t); + } + break; + case EQUIT: + case OBLIQ: + t = sin (P->phi0); + X = 2. * atan (ssfn_(P->phi0, t, P->e)) - M_HALFPI; + t *= P->e; + Q->akm1 = 2. * P->k0 * cos (P->phi0) / sqrt(1. - t * t); + Q->sinX1 = sin (X); + Q->cosX1 = cos (X); + break; + } + P->inv = e_inverse; + P->fwd = e_forward; + } else { + switch (Q->mode) { + case OBLIQ: + sinph0 = sin (P->phi0); + cosph0 = cos (P->phi0); + case EQUIT: + Q->akm1 = 2. * P->k0; + break; + case S_POLE: + case N_POLE: + Q->akm1 = fabs (Q->phits - M_HALFPI) >= EPS10 ? + cos (Q->phits) / tan (M_FORTPI - .5 * Q->phits) : + 2. * P->k0 ; + break; + } + + P->inv = s_inverse; + P->fwd = s_forward; + } + return P; +} + + +PJ *PROJECTION(stere) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->phits = pj_param (P->ctx, P->params, "tlat_ts").i ? + pj_param (P->ctx, P->params, "rlat_ts").f : M_HALFPI; + + return setup(P); +} + + +PJ *PROJECTION(ups) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + /* International Ellipsoid */ + P->phi0 = pj_param(P->ctx, P->params, "bsouth").i ? - M_HALFPI: M_HALFPI; + if (!P->es) E_ERROR(-34); + P->k0 = .994; + P->x0 = 2000000.; + P->y0 = 2000000.; + Q->phits = M_HALFPI; + P->lam0 = 0.; + + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_stere_selftest (void) {return 0;} +#else + +int pj_stere_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=stere +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=stere +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 445289.70910023432, 221221.76694834774}, + { 445289.70910023432, -221221.76694835056}, + {-445289.70910023432, 221221.76694834774}, + {-445289.70910023432, -221221.76694835056}, + }; + + XY s_fwd_expect[] = { + { 223407.81025950745, 111737.938996443}, + { 223407.81025950745, -111737.938996443}, + {-223407.81025950745, 111737.938996443}, + {-223407.81025950745, -111737.938996443}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305682022392, 0.00090436947502443507}, + { 0.0017966305682022392, -0.00090436947502443507}, + {-0.0017966305682022392, 0.00090436947502443507}, + {-0.0017966305682022392, -0.00090436947502443507}, + }; + + LP s_inv_expect[] = { + { 0.001790493109747395, 0.00089524655465513144}, + { 0.001790493109747395, -0.00089524655465513144}, + {-0.001790493109747395, 0.00089524655465513144}, + {-0.001790493109747395, -0.00089524655465513144}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif + + + + + +#ifndef PJ_SELFTEST +int pj_ups_selftest (void) {return 0;} +#else + +int pj_ups_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=ups +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {2433455.5634384668, -10412543.301512826}, + {2448749.1185681992, -10850493.419804076}, + {1566544.4365615332, -10412543.301512826}, + {1551250.8814318008, -10850493.419804076}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {-44.998567498074834, 64.9182362867341}, + {-44.995702709112308, 64.917020250675748}, + {-45.004297076028529, 64.915804280954518}, + {-45.001432287066002, 64.914588377560719}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/PJ_sterea.c b/proj4/src/PJ_sterea.c new file mode 100644 index 000000000000..1b912316f891 --- /dev/null +++ b/proj4/src/PJ_sterea.c @@ -0,0 +1,178 @@ +/* +** libproj -- library of cartographic projections +** +** Copyright (c) 2003 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 PJ_LIB__ +#include + + +struct pj_opaque { + double phic0; + double cosc0, sinc0; + double R2; + void *en; +}; + + +PROJ_HEAD(sterea, "Oblique Stereographic Alternative") "\n\tAzimuthal, Sph&Ell"; +# define DEL_TOL 1.e-14 +# define MAX_ITER 10 + + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cosc, sinc, cosl, k; + + lp = pj_gauss(P->ctx, lp, Q->en); + sinc = sin(lp.phi); + cosc = cos(lp.phi); + cosl = cos(lp.lam); + k = P->k0 * Q->R2 / (1. + Q->sinc0 * sinc + Q->cosc0 * cosc * cosl); + xy.x = k * cosc * sin(lp.lam); + xy.y = k * (Q->cosc0 * sinc - Q->sinc0 * cosc * cosl); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double rho, c, sinc, cosc; + + xy.x /= P->k0; + xy.y /= P->k0; + if ( (rho = hypot (xy.x, xy.y)) ) { + c = 2. * atan2 (rho, Q->R2); + sinc = sin (c); + cosc = cos (c); + lp.phi = asin (cosc * Q->sinc0 + xy.y * sinc * Q->cosc0 / rho); + lp.lam = atan2 (xy.x * sinc, rho * Q->cosc0 * cosc - xy.y * Q->sinc0 * sinc); + } else { + lp.phi = Q->phic0; + lp.lam = 0.; + } + return pj_inv_gauss(P->ctx, lp, Q->en); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(sterea) { + double R; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->en = pj_gauss_ini(P->e, P->phi0, &(Q->phic0), &R); + if (0==Q->en) + return freeup_new (P); + + Q->sinc0 = sin (Q->phic0); + Q->cosc0 = cos (Q->phic0); + Q->R2 = 2. * R; + + P->inv = e_inverse; + P->fwd = e_forward; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_sterea_selftest (void) {return 0;} +#else + +int pj_sterea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=sterea +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=sterea +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222644.89410919772, 110611.09187173686}, + { 222644.89410919772, -110611.09187173827}, + {-222644.89410919772, 110611.09187173686}, + {-222644.89410919772, -110611.09187173827}, + }; + + XY s_fwd_expect[] = { + { 223407.81025950745, 111737.93899644315}, + { 223407.81025950745, -111737.93899644315}, + {-223407.81025950745, 111737.93899644315}, + {-223407.81025950745, -111737.93899644315}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305682019911, 0.00090436947683099009}, + { 0.0017966305682019911, -0.00090436947684371233}, + {-0.0017966305682019911, 0.00090436947683099009}, + {-0.0017966305682019911, -0.00090436947684371233}, + }; + + LP s_inv_expect[] = { + { 0.001790493109747395, 0.00089524655465446378}, + { 0.001790493109747395, -0.00089524655465446378}, + {-0.001790493109747395, 0.00089524655465446378}, + {-0.001790493109747395, -0.00089524655465446378}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_sts.c b/proj4/src/PJ_sts.c new file mode 100644 index 000000000000..b6b6dc43c280 --- /dev/null +++ b/proj4/src/PJ_sts.c @@ -0,0 +1,351 @@ +#define PJ_LIB__ +# include + +PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph."; +PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph."; +PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph."; +PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph."; + + +struct pj_opaque { + double C_x, C_y, C_p; \ + int tan_mode; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double c; + + xy.x = Q->C_x * lp.lam * cos(lp.phi); + xy.y = Q->C_y; + lp.phi *= Q->C_p; + c = cos(lp.phi); + if (Q->tan_mode) { + xy.x *= c * c; + xy.y *= tan (lp.phi); + } else { + xy.x /= c; + xy.y *= sin (lp.phi); + } + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double c; + + xy.y /= Q->C_y; + c = cos (lp.phi = Q->tan_mode ? atan (xy.y) : aasin (P->ctx, xy.y)); + lp.phi /= Q->C_p; + lp.lam = xy.x / (Q->C_x * cos(lp.phi)); + if (Q->tan_mode) + lp.lam /= c * c; + else + lp.lam *= c; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +static PJ *setup(PJ *P, double p, double q, int mode) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + P->opaque->C_x = q / p; + P->opaque->C_y = p; + P->opaque->C_p = 1/ q; + P->opaque->tan_mode = mode; + return P; +} + + + + + +PJ *PROJECTION(fouc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + return setup(P, 2., 2., 1); +} + + +#ifndef PJ_SELFTEST +int pj_fouc_selftest (void) {return 0;} +#else +int pj_fouc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=fouc +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=fouc +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222588.12067589167, 111322.31670069379}, + {222588.12067589167, -111322.31670069379}, + {-222588.12067589167, 111322.31670069379}, + {-222588.12067589167, -111322.31670069379}, + }; + + XY s_fwd_expect[] = { + {223351.10900341379, 111703.9077217125}, + {223351.10900341379, -111703.9077217125}, + {-223351.10900341379, 111703.9077217125}, + {-223351.10900341379, -111703.9077217125}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017966305685702751, 0.00089831528410111959}, + {0.0017966305685702751, -0.00089831528410111959}, + {-0.0017966305685702751, 0.00089831528410111959}, + {-0.0017966305685702751, -0.00089831528410111959}, + }; + + LP s_inv_expect[] = { + {0.0017904931101116717, 0.00089524655487369749}, + {0.0017904931101116717, -0.00089524655487369749}, + {-0.0017904931101116717, 0.00089524655487369749}, + {-0.0017904931101116717, -0.00089524655487369749}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif + + + + + + +PJ *PROJECTION(kav5) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + return setup(P, 1.50488, 1.35439, 0); +} + + +#ifndef PJ_SELFTEST +int pj_kav5_selftest (void) {return 0;} +#else +int pj_kav5_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=kav5 +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=kav5 +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {200360.90530882866, 123685.08247699818}, + {200360.90530882866, -123685.08247699818}, + {-200360.90530882866, 123685.08247699818}, + {-200360.90530882866, -123685.08247699818}, + }; + + XY s_fwd_expect[] = { + {201047.7031108776, 124109.05062917093}, + {201047.7031108776, -124109.05062917093}, + {-201047.7031108776, 124109.05062917093}, + {-201047.7031108776, -124109.05062917093}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0019962591348533314, 0.00080848256185253912}, + {0.0019962591348533314, -0.00080848256185253912}, + {-0.0019962591348533314, 0.00080848256185253912}, + {-0.0019962591348533314, -0.00080848256185253912}, + }; + + LP s_inv_expect[] = { + {0.0019894397264987643, 0.00080572070962591153}, + {0.0019894397264987643, -0.00080572070962591153}, + {-0.0019894397264987643, 0.00080572070962591153}, + {-0.0019894397264987643, -0.00080572070962591153}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif + + + + + +PJ *PROJECTION(qua_aut) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + return setup(P, 2., 2., 0); +} + +#ifndef PJ_SELFTEST +int pj_qua_aut_selftest (void) {return 0;} +#else +int pj_qua_aut_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=qua_aut +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=qua_aut +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222613.54903309655, 111318.07788798446}, + {222613.54903309655, -111318.07788798446}, + {-222613.54903309655, 111318.07788798446}, + {-222613.54903309655, -111318.07788798446}, + }; + + XY s_fwd_expect[] = { + {223376.62452402918, 111699.65437918637}, + {223376.62452402918, -111699.65437918637}, + {-223376.62452402918, 111699.65437918637}, + {-223376.62452402918, -111699.65437918637}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017966305684046586, 0.00089831528412872229}, + {0.0017966305684046586, -0.00089831528412872229}, + {-0.0017966305684046586, 0.00089831528412872229}, + {-0.0017966305684046586, -0.00089831528412872229}, + }; + + LP s_inv_expect[] = { + {0.0017904931099477471, 0.00089524655490101819}, + {0.0017904931099477471, -0.00089524655490101819}, + {-0.0017904931099477471, 0.00089524655490101819}, + {-0.0017904931099477471, -0.00089524655490101819}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif + + + + + +PJ *PROJECTION(mbt_s) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + return setup(P, 1.48875, 1.36509, 0); +} + +#ifndef PJ_SELFTEST +int pj_mbt_s_selftest (void) {return 0;} +#else +int pj_mbt_s_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=mbt_s +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=mbt_s +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {204131.51785027285, 121400.33022550763}, + {204131.51785027285, -121400.33022550763}, + {-204131.51785027285, 121400.33022550763}, + {-204131.51785027285, -121400.33022550763}, + }; + + XY s_fwd_expect[] = { + {204831.24057099217, 121816.46669603503}, + {204831.24057099217, -121816.46669603503}, + {-204831.24057099217, 121816.46669603503}, + {-204831.24057099217, -121816.46669603503}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0019593827209883237, 0.00082369854658027549}, + {0.0019593827209883237, -0.00082369854658027549}, + {-0.0019593827209883237, 0.00082369854658027549}, + {-0.0019593827209883237, -0.00082369854658027549}, + }; + + LP s_inv_expect[] = { + {0.0019526892859206603, 0.00082088471512331508}, + {0.0019526892859206603, -0.00082088471512331508}, + {-0.0019526892859206603, 0.00082088471512331508}, + {-0.0019526892859206603, -0.00082088471512331508}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif diff --git a/proj4/src/PJ_tcc.c b/proj4/src/PJ_tcc.c new file mode 100644 index 000000000000..316d5e50baa3 --- /dev/null +++ b/proj4/src/PJ_tcc.c @@ -0,0 +1,65 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv."; + +#define EPS10 1.e-10 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + double b, bt; + + b = cos (lp.phi) * sin (lp.lam); + if ((bt = 1. - b * b) < EPS10) F_ERROR; + xy.x = b / sqrt(bt); + xy.y = atan2 (tan (lp.phi) , cos (lp.lam)); + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(tcc) { + P->es = 0.; + P->fwd = s_forward; + P->inv = 0; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_tcc_selftest (void) {return 0;} +#else +int pj_tcc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=tcc +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223458.84419245756, 111769.14504058579}, + {223458.84419245756, -111769.14504058579}, + {-223458.84419245756, 111769.14504058579}, + {-223458.84419245756, -111769.14504058579}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif diff --git a/proj4/src/PJ_tcea.c b/proj4/src/PJ_tcea.c new file mode 100644 index 000000000000..d219928d07c5 --- /dev/null +++ b/proj4/src/PJ_tcea.c @@ -0,0 +1,85 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") "\n\tCyl, Sph"; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + xy.x = cos (lp.phi) * sin (lp.lam) / P->k0; + xy.y = P->k0 * (atan2 (tan (lp.phi), cos (lp.lam)) - P->phi0); + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0, 0.0}; + double t; + + xy.y = xy.y / P->k0 + P->phi0; + xy.x *= P->k0; + t = sqrt (1. - xy.x * xy.x); + lp.phi = asin (t * sin (xy.y)); + lp.lam = atan2 (xy.x, t * cos (xy.y)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(tcea) { + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_tcea_selftest (void) {return 0;} +#else +int pj_tcea_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=tcea +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223322.76057672748, 111769.14504058579}, + { 223322.76057672748, -111769.14504058579}, + {-223322.76057672748, 111769.14504058579}, + {-223322.76057672748, -111769.14504058579}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931102938101, 0.00089524655445477922}, + { 0.0017904931102938101, -0.00089524655445477922}, + {-0.0017904931102938101, 0.00089524655445477922}, + {-0.0017904931102938101, -0.00089524655445477922}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} +#endif diff --git a/proj4/src/PJ_times.c b/proj4/src/PJ_times.c new file mode 100644 index 000000000000..5d3b03911045 --- /dev/null +++ b/proj4/src/PJ_times.c @@ -0,0 +1,135 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the Times projection. + * Author: Kristian Evers + * + ****************************************************************************** + * Copyright (c) 2016, Kristian Evers + * + * 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. + ***************************************************************************** + * Based on describtion of the Times Projection in + * + * Flattening the Earth, Snyder, J.P., 1993, p.213-214. + *****************************************************************************/ + +#define PJ_LIB__ +#include + +PROJ_HEAD(times, "Times") "\n\tCyl, Sph"; + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + double T, S, S2; + XY xy = {0.0,0.0}; + (void) P; + + T = tan(lp.phi/2.0); + S = sin(M_FORTPI * T); + S2 = S*S; + + xy.x = lp.lam * (0.74482 - 0.34588*S2); + xy.y = 1.70711 * T; + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + double T, S, S2; + LP lp = {0.0,0.0}; + (void) P; + + T = xy.y / 1.70711; + S = sin(M_FORTPI * T); + S2 = S*S; + + lp.lam = xy.x / (0.74482 - 0.34588 * S2); + lp.phi = 2 * atan(T); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(times) { + P->es = 0.0; + + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_times_selftest (void) {return 0;} +#else + +int pj_times_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + int result; + int n = 5; + + char s_args[] = {"+proj=times +ellps=sphere"}; + + XY *inv_in = malloc(n*sizeof(XY)); + LP *s_inv_expect = malloc(n*sizeof(LP)); + + LP fwd_in[] = { + { 0, 0}, + { 80, 70}, + { 25, -10}, + {-35, 20}, + {-45, -30} + }; + + XY s_fwd_expect[] = { + { 0.0, 0.0}, + { 5785183.5760670956, 7615452.0661204215}, + { 2065971.5301078814, -951526.0648494592}, + {-2873054.0454850947, 1917730.9530005211}, + {-3651383.2035214868, -2914213.4578159209}, + }; + + memcpy(inv_in, &s_fwd_expect, n*sizeof(XY)); + memcpy(s_inv_expect, &fwd_in, n*sizeof(LP)); + + result = pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, n, n, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); + free(inv_in); + free(s_inv_expect); + + return result; +} + + +#endif diff --git a/proj4/src/PJ_tmerc.c b/proj4/src/PJ_tmerc.c new file mode 100644 index 000000000000..edae80fd827f --- /dev/null +++ b/proj4/src/PJ_tmerc.c @@ -0,0 +1,252 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(tmerc, "Transverse Mercator") "\n\tCyl, Sph&Ell"; + + +struct pj_opaque { + double esp; \ + double ml0; \ + double *en; +}; + +#define EPS10 1.e-10 +#define FC1 1. +#define FC2 .5 +#define FC3 .16666666666666666666 +#define FC4 .08333333333333333333 +#define FC5 .05 +#define FC6 .03333333333333333333 +#define FC7 .02380952380952380952 +#define FC8 .01785714285714285714 + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double al, als, n, cosphi, sinphi, t; + + /* + * Fail if our longitude is more than 90 degrees from the + * central meridian since the results are essentially garbage. + * Is error -20 really an appropriate return value? + * + * http://trac.osgeo.org/proj/ticket/5 + */ + if( lp.lam < -M_HALFPI || lp.lam > M_HALFPI ) { + xy.x = HUGE_VAL; + xy.y = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -14 ); + return xy; + } + + sinphi = sin (lp.phi); + cosphi = cos (lp.phi); + t = fabs (cosphi) > 1e-10 ? sinphi/cosphi : 0.; + t *= t; + al = cosphi * lp.lam; + als = al * al; + al /= sqrt (1. - P->es * sinphi * sinphi); + n = Q->esp * cosphi * cosphi; + xy.x = P->k0 * al * (FC1 + + FC3 * als * (1. - t + n + + FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t) + + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) ) + ))); + xy.y = P->k0 * (pj_mlfn(lp.phi, sinphi, cosphi, Q->en) - Q->ml0 + + sinphi * al * lp.lam * FC2 * ( 1. + + FC4 * als * (5. - t + n * (9. + 4. * n) + + FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t) + + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) ) + )))); + return (xy); +} + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double b, cosphi; + + /* + * Fail if our longitude is more than 90 degrees from the + * central meridian since the results are essentially garbage. + * Is error -20 really an appropriate return value? + * + * http://trac.osgeo.org/proj/ticket/5 + */ + if( lp.lam < -M_HALFPI || lp.lam > M_HALFPI ) { + xy.x = HUGE_VAL; + xy.y = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -14 ); + return xy; + } + + cosphi = cos(lp.phi); + b = cosphi * sin (lp.lam); + if (fabs (fabs (b) - 1.) <= EPS10) + F_ERROR; + + xy.x = P->opaque->ml0 * log ((1. + b) / (1. - b)); + xy.y = cosphi * cos (lp.lam) / sqrt (1. - b * b); + + b = fabs ( xy.y ); + if (b >= 1.) { + if ((b - 1.) > EPS10) + F_ERROR + else xy.y = 0.; + } else + xy.y = acos (xy.y); + + if (lp.phi < 0.) + xy.y = -xy.y; + xy.y = P->opaque->esp * (xy.y - P->phi0); + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double n, con, cosphi, d, ds, sinphi, t; + + lp.phi = pj_inv_mlfn(P->ctx, Q->ml0 + xy.y / P->k0, P->es, Q->en); + if (fabs(lp.phi) >= M_HALFPI) { + lp.phi = xy.y < 0. ? -M_HALFPI : M_HALFPI; + lp.lam = 0.; + } else { + sinphi = sin(lp.phi); + cosphi = cos(lp.phi); + t = fabs (cosphi) > 1e-10 ? sinphi/cosphi : 0.; + n = Q->esp * cosphi * cosphi; + d = xy.x * sqrt (con = 1. - P->es * sinphi * sinphi) / P->k0; + con *= t; + t *= t; + ds = d * d; + lp.phi -= (con * ds / (1.-P->es)) * FC2 * (1. - + ds * FC4 * (5. + t * (3. - 9. * n) + n * (1. - 4 * n) - + ds * FC6 * (61. + t * (90. - 252. * n + + 45. * t) + 46. * n + - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) ) + ))); + lp.lam = d*(FC1 - + ds*FC3*( 1. + 2.*t + n - + ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n + - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) ) + ))) / cosphi; + } + return lp; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0, 0.0}; + double h, g; + + h = exp(xy.x / P->opaque->esp); + g = .5 * (h - 1. / h); + h = cos (P->phi0 + xy.y / P->opaque->esp); + lp.phi = asin(sqrt((1. - h * h) / (1. + g * g))); + if (xy.y < 0.) lp.phi = -lp.phi; + lp.lam = (g || h) ? atan2 (g, h) : 0.; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +static PJ *setup(PJ *P) { /* general initialization */ + struct pj_opaque *Q = P->opaque; + if (P->es) { + if (!(Q->en = pj_enfn(P->es))) + E_ERROR_0; + Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); + Q->esp = P->es / (1. - P->es); + P->inv = e_inverse; + P->fwd = e_forward; + } else { + Q->esp = P->k0; + Q->ml0 = .5 * Q->esp; + P->inv = s_inverse; + P->fwd = s_forward; + } + return P; +} + + +PJ *PROJECTION(tmerc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_tmerc_selftest (void) {return 0;} +#else +int pj_tmerc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=tmerc +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=tmerc +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222650.79679577847, 110642.22941192707}, + { 222650.79679577847, -110642.22941192707}, + {-222650.79679577847, 110642.22941192707}, + {-222650.79679577847, -110642.22941192707}, + }; + + XY s_fwd_expect[] = { + { 223413.46640632232, 111769.14504059685}, + { 223413.46640632232, -111769.14504059685}, + {-223413.46640632208, 111769.14504059685}, + {-223413.46640632208, -111769.14504059685}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305681649396, 0.00090436947663183841}, + { 0.0017966305681649396, -0.00090436947663183841}, + {-0.0017966305681649396, 0.00090436947663183841}, + {-0.0017966305681649396, -0.00090436947663183841}, + }; + + LP s_inv_expect[] = { + { 0.0017904931097048034, 0.00089524670602767842}, + { 0.0017904931097048034, -0.00089524670602767842}, + {-0.001790493109714345, 0.00089524670602767842}, + {-0.001790493109714345, -0.00089524670602767842}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} +#endif diff --git a/proj4/src/PJ_tpeqd.c b/proj4/src/PJ_tpeqd.c new file mode 100644 index 000000000000..1b289a0b0bcc --- /dev/null +++ b/proj4/src/PJ_tpeqd.c @@ -0,0 +1,177 @@ +#define PJ_LIB__ +#include + + +PROJ_HEAD(tpeqd, "Two Point Equidistant") + "\n\tMisc Sph\n\tlat_1= lon_1= lat_2= lon_2="; + +struct pj_opaque { + double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2; \ + double hz0, thz0, rhshz0, ca, sa, lp, lamc; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double t, z1, z2, dl1, dl2, sp, cp; + + sp = sin(lp.phi); + cp = cos(lp.phi); + z1 = aacos(P->ctx, Q->sp1 * sp + Q->cp1 * cp * cos (dl1 = lp.lam + Q->dlam2)); + z2 = aacos(P->ctx, Q->sp2 * sp + Q->cp2 * cp * cos (dl2 = lp.lam - Q->dlam2)); + z1 *= z1; + z2 *= z2; + + xy.x = Q->r2z0 * (t = z1 - z2); + t = Q->z02 - t; + xy.y = Q->r2z0 * asqrt (4. * Q->z02 * z2 - t * t); + if ((Q->ccs * sp - cp * (Q->cs * sin(dl1) - Q->sc * sin(dl2))) < 0.) + xy.y = -xy.y; + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double cz1, cz2, s, d, cp, sp; + + cz1 = cos (hypot(xy.y, xy.x + Q->hz0)); + cz2 = cos (hypot(xy.y, xy.x - Q->hz0)); + s = cz1 + cz2; + d = cz1 - cz2; + lp.lam = - atan2(d, (s * Q->thz0)); + lp.phi = aacos(P->ctx, hypot (Q->thz0 * s, d) * Q->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->ctx, Q->sa * sp + Q->ca * cp * (s = cos(lp.lam -= Q->lp))); + lp.lam = atan2 (cp * sin(lp.lam), Q->sa * cp * s - Q->ca * sp) + Q->lamc; + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(tpeqd) { + double lam_1, lam_2, phi_1, phi_2, A12, pp; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + + /* get control point locations */ + 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)); + Q->dlam2 = adjlon (lam_2 - lam_1); + + Q->cp1 = cos (phi_1); + Q->cp2 = cos (phi_2); + Q->sp1 = sin (phi_1); + Q->sp2 = sin (phi_2); + Q->cs = Q->cp1 * Q->sp2; + Q->sc = Q->sp1 * Q->cp2; + Q->ccs = Q->cp1 * Q->cp2 * sin(Q->dlam2); + Q->z02 = aacos(P->ctx, Q->sp1 * Q->sp2 + Q->cp1 * Q->cp2 * cos (Q->dlam2)); + Q->hz0 = .5 * Q->z02; + A12 = atan2(Q->cp2 * sin (Q->dlam2), + Q->cp1 * Q->sp2 - Q->sp1 * Q->cp2 * cos (Q->dlam2)); + Q->ca = cos(pp = aasin(P->ctx, Q->cp1 * sin(A12))); + Q->sa = sin(pp); + Q->lp = adjlon ( atan2 (Q->cp1 * cos(A12), Q->sp1) - Q->hz0); + Q->dlam2 *= .5; + Q->lamc = M_HALFPI - atan2(sin(A12) * Q->sp1, cos(A12)) - Q->dlam2; + Q->thz0 = tan (Q->hz0); + Q->rhshz0 = .5 / sin (Q->hz0); + Q->r2z0 = 0.5 / Q->z02; + Q->z02 *= Q->z02; + + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_tpeqd_selftest (void) {return 0;} +#else + +int pj_tpeqd_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=tpeqd +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5"}; + char s_args[] = {"+proj=tpeqd +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {-27750.758831679042, -222599.40369177726}, + {-250434.93702403645, -222655.93819326628}, + {-27750.758831679042, 222599.40369177726}, + {-250434.93702403645, 222655.93819326628}, + }; + + XY s_fwd_expect[] = { + {-27845.882978485075, -223362.43069526015}, + {-251293.37876465076, -223419.15898590829}, + {-27845.882978485075, 223362.43069526015}, + {-251293.37876465076, 223419.15898590829}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {-0.00089855554821257374, 1.2517966304145272}, + {0.0008985555481998515, 1.2517966304145272}, + {-0.00089855431859741167, 1.2482033692781642}, + {0.00089855431859741167, 1.2482033692781642}, + }; + + LP s_inv_expect[] = { + {-0.00089548606640108474, 1.2517904929571837}, + {0.0008954860663883625, 1.2517904929571837}, + {-0.000895484845182587, 1.248209506737604}, + {0.00089548484516986475, 1.248209506737604}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, s_fwd_expect, inv_in, e_inv_expect, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_urm5.c b/proj4/src/PJ_urm5.c new file mode 100644 index 000000000000..f19d5c439034 --- /dev/null +++ b/proj4/src/PJ_urm5.c @@ -0,0 +1,81 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph., no inv.\n\tn= q= alpha="; + +struct pj_opaque { + double m, rmn, q3, n; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + struct pj_opaque *Q = P->opaque; + double t; + + t = lp.phi = aasin (P->ctx, Q->n * sin (lp.phi)); + xy.x = Q->m * lp.lam * cos (lp.phi); + t *= t; + xy.y = lp.phi * (1. + t * Q->q3) * Q->rmn; + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(urm5) { + double alpha, t; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->n = pj_param(P->ctx, P->params, "dn").f; + Q->q3 = pj_param(P->ctx, P->params, "dq").f / 3.; + alpha = pj_param(P->ctx, P->params, "ralpha").f; + t = Q->n * sin (alpha); + Q->m = cos (alpha) / sqrt (1. - t * t); + Q->rmn = 1. / (Q->m * Q->n); + + P->es = 0.; + P->inv = 0; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_urm5_selftest (void) {return 0;} +#else +int pj_urm5_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=urm5 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223393.6384339639, 111696.81878511712}, + { 223393.6384339639, -111696.81878511712}, + {-223393.6384339639, 111696.81878511712}, + {-223393.6384339639, -111696.81878511712}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif diff --git a/proj4/src/PJ_urmfps.c b/proj4/src/PJ_urmfps.c new file mode 100644 index 000000000000..ff775c2513ca --- /dev/null +++ b/proj4/src/PJ_urmfps.c @@ -0,0 +1,166 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph.\n\tn="; +PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph."; + +struct pj_opaque { + double n, C_y; +}; + +#define C_x 0.8773826753 +#define Cy 1.139753528477 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + lp.phi = aasin (P->ctx,P->opaque->n * sin (lp.phi)); + xy.x = C_x * lp.lam * cos (lp.phi); + xy.y = P->opaque->C_y * lp.phi; + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0, 0.0}; + xy.y /= P->opaque->C_y; + lp.phi = aasin(P->ctx, sin (xy.y) / P->opaque->n); + lp.lam = xy.x / (C_x * cos (xy.y)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +static PJ *setup(PJ *P) { + P->opaque->C_y = Cy / P->opaque->n; + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + return P; +} + + +PJ *PROJECTION(urmfps) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (pj_param(P->ctx, P->params, "tn").i) { + P->opaque->n = pj_param(P->ctx, P->params, "dn").f; + if (P->opaque->n <= 0. || P->opaque->n > 1.) + E_ERROR(-40) + } else + E_ERROR(-40) + + return setup(P); +} + + +PJ *PROJECTION(wag1) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + P->opaque->n = 0.8660254037844386467637231707; + return setup(P); +} + + +#ifndef PJ_SELFTEST +int pj_urmfps_selftest (void) {return 0;} +#else +int pj_urmfps_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=urmfps +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 196001.70813419219, 127306.84332999329}, + { 196001.70813419219, -127306.84332999329}, + {-196001.70813419219, 127306.84332999329}, + {-196001.70813419219, -127306.84332999329}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.002040720839642371, 0.00078547381740438178}, + { 0.002040720839642371, -0.00078547381740438178}, + {-0.002040720839642371, 0.00078547381740438178}, + {-0.002040720839642371, -0.00078547381740438178}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} +#endif + + +#ifndef PJ_SELFTEST +int pj_wag1_selftest (void) {return 0;} +#else +int pj_wag1_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag1 +a=6400000 +lat_1=0.5 +lat_2=2 +n=0.5"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 195986.78156115755, 127310.07506065986}, + { 195986.78156115755, -127310.07506065986}, + {-195986.78156115755, 127310.07506065986}, + {-195986.78156115755, -127310.07506065986}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.002040720839738254, 0.00078547381739207999}, + { 0.002040720839738254, -0.00078547381739207999}, + {-0.002040720839738254, 0.00078547381739207999}, + {-0.002040720839738254, -0.00078547381739207999}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} +#endif + diff --git a/proj4/src/PJ_vandg.c b/proj4/src/PJ_vandg.c new file mode 100644 index 000000000000..18d75f126c8e --- /dev/null +++ b/proj4/src/PJ_vandg.c @@ -0,0 +1,156 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(vandg, "van der Grinten (I)") "\n\tMisc Sph"; + +# define TOL 1.e-10 +# define THIRD .33333333333333333333 +# define TWO_THRD .66666666666666666666 +# define C2_27 .07407407407407407407 +# define PI4_3 4.18879020478639098458 +# define PISQ 9.86960440108935861869 +# define TPISQ 19.73920880217871723738 +# define HPISQ 4.93480220054467930934 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double al, al2, g, g2, p2; + + p2 = fabs(lp.phi / M_HALFPI); + if ((p2 - TOL) > 1.) F_ERROR; + if (p2 > 1.) + p2 = 1.; + if (fabs(lp.phi) <= TOL) { + xy.x = lp.lam; + xy.y = 0.; + } else if (fabs(lp.lam) <= TOL || fabs(p2 - 1.) < TOL) { + xy.x = 0.; + xy.y = M_PI * tan(.5 * asin(p2)); + if (lp.phi < 0.) xy.y = -xy.y; + } else { + al = .5 * fabs(M_PI / lp.lam - lp.lam / M_PI); + al2 = al * al; + g = sqrt(1. - p2 * p2); + g = g / (p2 + g - 1.); + g2 = g * g; + p2 = g * (2. / p2 - 1.); + p2 = p2 * p2; + xy.x = g - p2; g = p2 + al2; + xy.x = M_PI * (al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g; + if (lp.lam < 0.) xy.x = -xy.x; + xy.y = fabs(xy.x / M_PI); + xy.y = 1. - xy.y * (xy.y + 2. * al); + if (xy.y < -TOL) F_ERROR; + if (xy.y < 0.) + xy.y = 0.; + else + xy.y = sqrt(xy.y) * (lp.phi < 0. ? -M_PI : M_PI); + } + + return xy; +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2; + + x2 = xy.x * xy.x; + if ((ay = fabs(xy.y)) < TOL) { + lp.phi = 0.; + t = x2 * x2 + TPISQ * (x2 + HPISQ); + lp.lam = fabs(xy.x) <= TOL ? 0. : + .5 * (x2 - PISQ + sqrt(t)) / xy.x; + return (lp); + } + y2 = xy.y * xy.y; + r = x2 + y2; r2 = r * r; + c1 = - M_PI * ay * (r + PISQ); + c3 = r2 + M_TWOPI * (ay * r + M_PI * (y2 + M_PI * (ay + M_HALFPI))); + c2 = c1 + PISQ * (r - 3. * y2); + c0 = M_PI * ay; + c2 /= c3; + al = c1 / c3 - THIRD * c2 * c2; + m = 2. * sqrt(-THIRD * al); + d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; + if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) { + d = t > 1. ? (d > 0. ? 0. : M_PI) : acos(d); + lp.phi = M_PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2); + if (xy.y < 0.) lp.phi = -lp.phi; + t = r2 + TPISQ * (x2 - y2 + HPISQ); + lp.lam = fabs(xy.x) <= TOL ? 0. : + .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x; + } else + I_ERROR; + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(vandg) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_vandg_selftest (void) {return 0;} +#else + +int pj_vandg_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=vandg +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223395.24954340671, 111704.59663367498}, + { 223395.24954340671, -111704.59663367498}, + {-223395.24954340671, 111704.59663367498}, + {-223395.24954340671, -111704.59663367498}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.001790493715929761, 0.00089524655486993867}, + { 0.001790493715929761, -0.00089524655486993867}, + {-0.001790493715929761, 0.00089524655486993867}, + {-0.001790493715929761, -0.00089524655486993867}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_vandg2.c b/proj4/src/PJ_vandg2.c new file mode 100644 index 000000000000..fac7e85defee --- /dev/null +++ b/proj4/src/PJ_vandg2.c @@ -0,0 +1,148 @@ +#define PJ_LIB__ +#include + +struct pj_opaque { + int vdg3; +}; + +PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv."; +PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv."; + +#define TOL 1e-10 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double x1, at, bt, ct; + + bt = fabs(M_TWO_D_PI * lp.phi); + if ((ct = 1. - bt * bt) < 0.) + ct = 0.; + else + ct = sqrt(ct); + if (fabs(lp.lam) < TOL) { + xy.x = 0.; + xy.y = M_PI * (lp.phi < 0. ? -bt : bt) / (1. + ct); + } else { + at = 0.5 * fabs(M_PI / lp.lam - lp.lam / M_PI); + if (Q->vdg3) { + x1 = bt / (1. + ct); + xy.x = M_PI * (sqrt(at * at + 1. - x1 * x1) - at); + xy.y = M_PI * x1; + } else { + x1 = (ct * sqrt(1. + at * at) - at * ct * ct) / + (1. + at * at * bt * bt); + xy.x = M_PI * x1; + xy.y = M_PI * sqrt(1. - x1 * (x1 + 2. * at) + TOL); + } + if ( lp.lam < 0.) xy.x = -xy.x; + if ( lp.phi < 0.) xy.y = -xy.y; + } + + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(vandg2) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->vdg3 = 0; + P->fwd = s_forward; + + return P; +} + +PJ *PROJECTION(vandg3) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + Q->vdg3 = 1; + P->es = 0.; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_vandg2_selftest (void) {return 0;} +#else + +int pj_vandg2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=vandg2 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223395.24785043663, 111718.49103722633}, + { 223395.24785043663, -111718.49103722633}, + {-223395.24785043663, 111718.49103722633}, + {-223395.24785043663, -111718.49103722633}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif + +#ifndef PJ_SELFTEST +int pj_vandg3_selftest (void) {return 0;} +#else + +int pj_vandg3_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=vandg3 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223395.24955283134, 111704.51990442065}, + { 223395.24955283134, -111704.51990442065}, + {-223395.24955283134, 111704.51990442065}, + {-223395.24955283134, -111704.51990442065}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_vandg4.c b/proj4/src/PJ_vandg4.c new file mode 100644 index 000000000000..2dbb0713d890 --- /dev/null +++ b/proj4/src/PJ_vandg4.c @@ -0,0 +1,97 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv."; + +#define TOL 1e-10 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + double x1, t, bt, ct, ft, bt2, ct2, dt, dt2; + (void) P; + + if (fabs(lp.phi) < TOL) { + xy.x = lp.lam; + xy.y = 0.; + } else if (fabs(lp.lam) < TOL || fabs(fabs(lp.phi) - M_HALFPI) < TOL) { + xy.x = 0.; + xy.y = lp.phi; + } else { + bt = fabs(M_TWO_D_PI * lp.phi); + bt2 = bt * bt; + ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.) + / (bt2 * (bt - 1.)); + ct2 = ct * ct; + dt = M_TWO_D_PI * lp.lam; + dt = dt + 1. / dt; + dt = sqrt(dt * dt - 4.); + if ((fabs(lp.lam) - M_HALFPI) < 0.) dt = -dt; + dt2 = dt * dt; + x1 = bt + ct; x1 *= x1; + t = bt + 3.*ct; + ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * ( + bt2 * (t * t + 4. * ct2) + + ct2 * (12. * bt * ct + 4. * ct2) ); + x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) / + (4.* x1 + dt2); + xy.x = M_HALFPI * x1; + xy.y = M_HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1); + if (lp.lam < 0.) xy.x = -xy.x; + if (lp.phi < 0.) xy.y = -xy.y; + } + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + + return pj_dealloc(P); +} + + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(vandg4) { + P->es = 0.; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_vandg4_selftest (void) {return 0;} +#else + +int pj_vandg4_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=vandg4 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223374.57729435508, 111701.19548415358 }, + { 223374.57729435508, -111701.19548415358 }, + {-223374.57729435508, 111701.19548415358 }, + {-223374.57729435508, -111701.19548415358 }, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} + + +#endif diff --git a/proj4/src/PJ_wag2.c b/proj4/src/PJ_wag2.c new file mode 100644 index 000000000000..9a41ab638dda --- /dev/null +++ b/proj4/src/PJ_wag2.c @@ -0,0 +1,88 @@ +#define PJ_LIB__ +# include +PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph."; +#define C_x 0.92483 +#define C_y 1.38725 +#define C_p1 0.88022 +#define C_p2 0.88550 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + 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); +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + lp.phi = xy.y / C_y; + lp.lam = xy.x / (C_x * cos(lp.phi)); + lp.phi = aasin (P->ctx,sin(lp.phi) / C_p1) / C_p2; + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(wag2) { + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_wag2_selftest (void) {return 0;} +#else + +int pj_wag2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag2 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 206589.88809996162, 120778.04035754716}, + { 206589.88809996162, -120778.04035754716}, + {-206589.88809996162, 120778.04035754716}, + {-206589.88809996162, -120778.04035754716}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0019360240367390709, 0.00082795765763814082}, + { 0.0019360240367390709, -0.00082795765763814082}, + {-0.0019360240367390709, 0.00082795765763814082}, + {-0.0019360240367390709, -0.00082795765763814082}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_wag3.c b/proj4/src/PJ_wag3.c new file mode 100644 index 000000000000..cd6c18e9b2e6 --- /dev/null +++ b/proj4/src/PJ_wag3.c @@ -0,0 +1,101 @@ +#define PJ_LIB__ +# include +PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl., Sph.\n\tlat_ts="; +#define TWOTHIRD 0.6666666666666666666667 + +struct pj_opaque { + double C_x; +}; + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + xy.x = P->opaque->C_x * lp.lam * cos(TWOTHIRD * lp.phi); + xy.y = lp.phi; + return xy; +} + + +#if 0 +INVERSE(s_inverse); /* spheroid */ +#endif + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + lp.phi = xy.y; + lp.lam = xy.x / (P->opaque->C_x * cos(TWOTHIRD * lp.phi)); + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(wag3) { + double ts; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + ts = pj_param (P->ctx, P->params, "rlat_ts").f; + P->opaque->C_x = cos (ts) / cos (2.*ts/3.); + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_wag3_selftest (void) {return 0;} +#else + +int pj_wag3_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag3 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + {223387.02171816575, 111701.07212763709}, + {223387.02171816575, -111701.07212763709}, + {-223387.02171816575, 111701.07212763709}, + {-223387.02171816575, -111701.07212763709}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + {0.001790493109880963, 0.00089524655489191132}, + {0.001790493109880963, -0.00089524655489191132}, + {-0.001790493109880963, 0.00089524655489191132}, + {-0.001790493109880963, -0.00089524655489191132}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_wag7.c b/proj4/src/PJ_wag7.c new file mode 100644 index 000000000000..d24f4e1ac6ee --- /dev/null +++ b/proj4/src/PJ_wag7.c @@ -0,0 +1,67 @@ +#define PJ_LIB__ +#include + +PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv."; + + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + double theta, ct, D; + + (void) P; /* Shut up compiler warnnings about unused P */ + + theta = asin (xy.y = 0.90630778703664996 * sin(lp.phi)); + xy.x = 2.66723 * (ct = cos (theta)) * sin (lp.lam /= 3.); + xy.y *= 1.24104 * (D = 1/(sqrt (0.5 * (1 + ct * cos (lp.lam))))); + xy.x *= D; + return (xy); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + + +PJ *PROJECTION(wag7) { + P->fwd = s_forward; + P->inv = 0; + P->es = 0.; + return P; +} + + +#ifndef PJ_SELFTEST +int pj_wag7_selftest (void) {return 0;} +#else + +int pj_wag7_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wag7 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 198601.87695731167, 125637.0457141714}, + { 198601.87695731167, -125637.0457141714}, + {-198601.87695731167, 125637.0457141714}, + {-198601.87695731167, -125637.0457141714}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif diff --git a/proj4/src/PJ_wink1.c b/proj4/src/PJ_wink1.c new file mode 100644 index 000000000000..320a4fb632e4 --- /dev/null +++ b/proj4/src/PJ_wink1.c @@ -0,0 +1,100 @@ +#define PJ_LIB__ +#include +PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl., Sph.\n\tlat_ts="; + + +struct pj_opaque { + double cosphi1; +}; + + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0,0.0}; + xy.x = .5 * lp.lam * (P->opaque->cosphi1 + cos(lp.phi)); + xy.y = lp.phi; + return (xy); +} + + +static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */ + LP lp = {0.0,0.0}; + lp.phi = xy.y; + lp.lam = 2. * xy.x / (P->opaque->cosphi1 + cos(lp.phi)); + return (lp); +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(wink1) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + P->opaque->cosphi1 = cos (pj_param(P->ctx, P->params, "rlat_ts").f); + P->es = 0.; + P->inv = s_inverse; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_wink1_selftest (void) {return 0;} +#else + +int pj_wink1_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wink1 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223385.13164095284, 111701.07212763709}, + { 223385.13164095284, -111701.07212763709}, + {-223385.13164095284, 111701.07212763709}, + {-223385.13164095284, -111701.07212763709}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP s_inv_expect[] = { + { 0.0017904931098931057, 0.00089524655489191132}, + { 0.0017904931098931057, -0.00089524655489191132}, + {-0.0017904931098931057, 0.00089524655489191132}, + {-0.0017904931098931057, -0.00089524655489191132}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, inv_in, 0, s_inv_expect); +} + + +#endif diff --git a/proj4/src/PJ_wink2.c b/proj4/src/PJ_wink2.c new file mode 100644 index 000000000000..4b82e423dbec --- /dev/null +++ b/proj4/src/PJ_wink2.c @@ -0,0 +1,92 @@ +#define PJ_LIB__ +# include + +PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1="; + +struct pj_opaque { double cosphi1; }; + +#define MAX_ITER 10 +#define LOOP_TOL 1e-7 + + +static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */ + XY xy = {0.0, 0.0}; + double k, V; + int i; + + xy.y = lp.phi * M_TWO_D_PI; + k = M_PI * sin (lp.phi); + lp.phi *= 1.8; + for (i = MAX_ITER; i ; --i) { + lp.phi -= V = (lp.phi + sin (lp.phi) - k) / + (1. + cos (lp.phi)); + if (fabs (V) < LOOP_TOL) + break; + } + if (!i) + lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; + else + lp.phi *= 0.5; + xy.x = 0.5 * lp.lam * (cos (lp.phi) + P->opaque->cosphi1); + xy.y = M_FORTPI * (sin (lp.phi) + xy.y); + return xy; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(wink2) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + P->opaque->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f); + P->es = 0.; + P->inv = 0; + P->fwd = s_forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_wink2_selftest (void) {return 0;} +#else + +int pj_wink2_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char s_args[] = {"+proj=wink2 +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY s_fwd_expect[] = { + { 223387.39643378611, 124752.03279744535}, + { 223387.39643378611, -124752.03279744535}, + {-223387.39643378611, 124752.03279744535}, + {-223387.39643378611, -124752.03279744535}, + }; + + return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0); +} +#endif diff --git a/proj4/src/aasincos.c b/proj4/src/aasincos.c new file mode 100644 index 000000000000..7cb6bd8958a9 --- /dev/null +++ b/proj4/src/aasincos.c @@ -0,0 +1,35 @@ +/* arc sin, cosine, tan2 and sqrt that will NOT fail */ +#include +#define ONE_TOL 1.00000000000001 +#define TOL 0.000000001 +#define ATOL 1e-50 + + double +aasin(projCtx ctx,double v) { + double av; + + if ((av = fabs(v)) >= 1.) { + if (av > ONE_TOL) + pj_ctx_set_errno( ctx, -19 ); + return (v < 0. ? -M_HALFPI : M_HALFPI); + } + return asin(v); +} + + double +aacos(projCtx ctx, double v) { + double av; + + if ((av = fabs(v)) >= 1.) { + if (av > ONE_TOL) + pj_ctx_set_errno( ctx, -19 ); + return (v < 0. ? M_PI : 0.); + } + return acos(v); +} + double +asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } + double +aatan2(double n, double d) { + return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n,d)); +} diff --git a/proj4/src/adjlon.c b/proj4/src/adjlon.c new file mode 100644 index 000000000000..09b3b14b3060 --- /dev/null +++ b/proj4/src/adjlon.c @@ -0,0 +1,15 @@ +/* reduce argument to range +/- PI */ +#include +#include + +#define SPI 3.14159265359 +#define TWOPI 6.2831853071795864769 +#define ONEPI 3.14159265358979323846 + +double adjlon (double lon) { + if (fabs(lon) <= SPI) return( lon ); + lon += ONEPI; /* adjust to 0..2pi rad */ + lon -= TWOPI * floor(lon / TWOPI); /* remove integral # of 'revolutions'*/ + lon -= ONEPI; /* adjust back to -pi..pi rad */ + return( lon ); +} diff --git a/proj4/src/bch2bps.c b/proj4/src/bch2bps.c new file mode 100644 index 000000000000..68a4737ddc89 --- /dev/null +++ b/proj4/src/bch2bps.c @@ -0,0 +1,140 @@ +/* convert bivariate w Chebyshev series to w Power series */ +#include +/* basic support procedures */ + static void /* clear vector to zero */ +clear(projUV *p, int n) { static const projUV c = {0., 0.}; while (n--) *p++ = c; } + static void /* clear matrix rows to zero */ +bclear(projUV **p, int n, int m) { while (n--) clear(*p++, m); } + static void /* move vector */ +bmove(projUV *a, projUV *b, int n) { while (n--) *a++ = *b++; } + static void /* a <- m * b - c */ +submop(projUV *a, double m, projUV *b, projUV *c, int n) { + while (n--) { + a->u = m * b->u - c->u; + a++->v = m * b++->v - c++->v; + } +} + static void /* a <- b - c */ +subop(projUV *a, projUV *b, projUV *c, int n) { + while (n--) { + a->u = b->u - c->u; + a++->v = b++->v - c++->v; + } +} + static void /* multiply vector a by scalar m */ +dmult(projUV *a, double m, int n) { while(n--) { a->u *= m; a->v *= m; ++a; } } + static void /* row adjust a[] <- a[] - m * b[] */ +dadd(projUV *a, projUV *b, double m, int n) { + while(n--) { + a->u -= m * b->u; + a++->v -= m * b++->v; + } +} + static void /* convert row to pover series */ +rows(projUV *c, projUV *d, int n) { + projUV sv, *dd; + int j, k; + + dd = (projUV *)vector1(n-1, sizeof(projUV)); + sv.u = sv.v = 0.; + for (j = 0; j < n; ++j) d[j] = dd[j] = sv; + d[0] = c[n-1]; + for (j = n-2; j >= 1; --j) { + for (k = n-j; k >= 1; --k) { + sv = d[k]; + d[k].u = 2. * d[k-1].u - dd[k].u; + d[k].v = 2. * d[k-1].v - dd[k].v; + dd[k] = sv; + } + sv = d[0]; + d[0].u = -dd[0].u + c[j].u; + d[0].v = -dd[0].v + c[j].v; + dd[0] = sv; + } + for (j = n-1; j >= 1; --j) { + d[j].u = d[j-1].u - dd[j].u; + d[j].v = d[j-1].v - dd[j].v; + } + d[0].u = -dd[0].u + .5 * c[0].u; + d[0].v = -dd[0].v + .5 * c[0].v; + pj_dalloc(dd); +} + static void /* convert columns to power series */ +cols(projUV **c, projUV **d, int nu, int nv) { + projUV *sv, **dd; + int j, k; + + dd = (projUV **)vector2(nu, nv, sizeof(projUV)); + sv = (projUV *)vector1(nv, sizeof(projUV)); + bclear(d, nu, nv); + bclear(dd, nu, nv); + bmove(d[0], c[nu-1], nv); + for (j = nu-2; j >= 1; --j) { + for (k = nu-j; k >= 1; --k) { + bmove(sv, d[k], nv); + submop(d[k], 2., d[k-1], dd[k], nv); + bmove(dd[k], sv, nv); + } + bmove(sv, d[0], nv); + subop(d[0], c[j], dd[0], nv); + bmove(dd[0], sv, nv); + } + for (j = nu-1; j >= 1; --j) + subop(d[j], d[j-1], dd[j], nv); + submop(d[0], .5, c[0], dd[0], nv); + freev2((void **) dd, nu); + pj_dalloc(sv); +} + static void /* row adjust for range -1 to 1 to a to b */ +rowshft(double a, double b, projUV *d, int n) { + int k, j; + double fac, cnst; + + cnst = 2. / (b - a); + fac = cnst; + for (j = 1; j < n; ++j) { + d[j].u *= fac; + d[j].v *= fac; + fac *= cnst; + } + cnst = .5 * (a + b); + for (j = 0; j <= n-2; ++j) + for (k = n - 2; k >= j; --k) { + d[k].u -= cnst * d[k+1].u; + d[k].v -= cnst * d[k+1].v; + } +} + static void /* column adjust for range -1 to 1 to a to b */ +colshft(double a, double b, projUV **d, int n, int m) { + int k, j; + double fac, cnst; + + cnst = 2. / (b - a); + fac = cnst; + for (j = 1; j < n; ++j) { + dmult(d[j], fac, m); + fac *= cnst; + } + cnst = .5 * (a + b); + for (j = 0; j <= n-2; ++j) + for (k = n - 2; k >= j; --k) + dadd(d[k], d[k+1], cnst, m); +} + int /* entry point */ +bch2bps(projUV a, projUV b, projUV **c, int nu, int nv) { + projUV **d; + int i; + + if (nu < 1 || nv < 1 || !(d = (projUV **)vector2(nu, nv, sizeof(projUV)))) + return 0; + /* do rows to power series */ + for (i = 0; i < nu; ++i) { + rows(c[i], d[i], nv); + rowshft(a.v, b.v, d[i], nv); + } + /* do columns to power series */ + cols(d, c, nu, nv); + colshft(a.u, b.u, c, nu, nv); + freev2((void **) d, nu); + return 1; +} diff --git a/proj4/src/bchgen.c b/proj4/src/bchgen.c new file mode 100644 index 000000000000..b4414501e3b7 --- /dev/null +++ b/proj4/src/bchgen.c @@ -0,0 +1,58 @@ +/* generate double bivariate Chebychev polynomial */ +#include + int +bchgen(projUV a, projUV b, int nu, int nv, projUV **f, projUV(*func)(projUV)) { + int i, j, k; + projUV arg, *t, bma, bpa, *c; + double d, fac; + + bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v); + bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v); + for ( i = 0; i < nu; ++i) { + arg.u = cos(M_PI * (i + 0.5) / nu) * bma.u + bpa.u; + for ( j = 0; j < nv; ++j) { + arg.v = cos(M_PI * (j + 0.5) / nv) * bma.v + bpa.v; + f[i][j] = (*func)(arg); + if ((f[i][j]).u == HUGE_VAL) + return(1); + } + } + if (!(c = (projUV *) vector1(nu, sizeof(projUV)))) return 1; + fac = 2. / nu; + for ( j = 0; j < nv ; ++j) { + for ( i = 0; i < nu; ++i) { + arg.u = arg.v = 0.; + for (k = 0; k < nu; ++k) { + d = cos(M_PI * i * (k + .5) / nu); + arg.u += f[k][j].u * d; + arg.v += f[k][j].v * d; + } + arg.u *= fac; + arg.v *= fac; + c[i] = arg; + } + for (i = 0; i < nu; ++i) + f[i][j] = c[i]; + } + pj_dalloc(c); + if (!(c = (projUV*) vector1(nv, sizeof(projUV)))) return 1; + fac = 2. / nv; + for ( i = 0; i < nu; ++i) { + t = f[i]; + for (j = 0; j < nv; ++j) { + arg.u = arg.v = 0.; + for (k = 0; k < nv; ++k) { + d = cos(M_PI * j * (k + .5) / nv); + arg.u += t[k].u * d; + arg.v += t[k].v * d; + } + arg.u *= fac; + arg.v *= fac; + c[j] = arg; + } + f[i] = c; + c = t; + } + pj_dalloc(c); + return(0); +} diff --git a/proj4/src/bin_cs2cs.cmake b/proj4/src/bin_cs2cs.cmake new file mode 100644 index 000000000000..59e57adcde8b --- /dev/null +++ b/proj4/src/bin_cs2cs.cmake @@ -0,0 +1,14 @@ +set(CS2CS_SRC cs2cs.c + gen_cheb.c + p_series.c) + +source_group("Source Files\\Bin" FILES ${CS2CS_SRC}) + +if(WIN32) + set(CS2CS_SRC ${CS2CS_SRC} emess.c) +endif(WIN32) + +add_executable(cs2cs ${CS2CS_SRC} ${CS2CS_INCLUDE}) +target_link_libraries(cs2cs ${PROJ_LIBRARIES}) +install(TARGETS cs2cs + RUNTIME DESTINATION ${BINDIR}) diff --git a/proj4/src/bin_geod.cmake b/proj4/src/bin_geod.cmake new file mode 100644 index 000000000000..c6dff71719dd --- /dev/null +++ b/proj4/src/bin_geod.cmake @@ -0,0 +1,16 @@ +set(GEOD_SRC geod.c + geod_set.c geod_interface.c ) +set(GEOD_INCLUDE geod_interface.h) + +source_group("Source Files\\Bin" FILES ${GEOD_SRC} ${GEOD_INCLUDE}) + +if(WIN32) + set(GEOD_SRC ${GEOD_SRC} emess.c) +endif(WIN32) + +#Executable +add_executable(geod ${GEOD_SRC} ${GEOD_INCLUDE}) +target_link_libraries(geod ${PROJ_LIBRARIES}) +install(TARGETS geod + RUNTIME DESTINATION ${BINDIR}) + diff --git a/proj4/src/bin_geodtest.cmake b/proj4/src/bin_geodtest.cmake new file mode 100644 index 000000000000..b89f75bea249 --- /dev/null +++ b/proj4/src/bin_geodtest.cmake @@ -0,0 +1,12 @@ +set(GEODTEST_SRC geodtest.c ) +set(GEODTEST_INCLUDE) + +source_group("Source Files\\Bin" FILES ${GEODTEST_SRC} ${GEODTEST_INCLUDE}) + +#Executable +add_executable(geodtest ${GEODTEST_SRC} ${GEODTEST_INCLUDE}) +target_link_libraries(geodtest ${PROJ_LIBRARIES}) +# Do not install + +# Instead run as a test +add_test (NAME geodesic-test COMMAND geodtest) diff --git a/proj4/src/bin_nad2bin.cmake b/proj4/src/bin_nad2bin.cmake new file mode 100644 index 000000000000..57cbfe21f9bb --- /dev/null +++ b/proj4/src/bin_nad2bin.cmake @@ -0,0 +1,17 @@ +if(WIN32 AND BUILD_LIBPROJ_SHARED) + message(warning " nad2nad can't be build with a DLL proj4 library you need a static lib") +endif(WIN32 AND BUILD_LIBPROJ_SHARED) + + +set(NAD2BIN_SRC nad2bin.c) +source_group("Source Files\\Bin" FILES ${NAD2BIN_SRC}) +if(WIN32) + set(NAD2BIN_SRC ${NAD2BIN_SRC} emess.c) +endif(WIN32) + +#Executable +add_executable(nad2bin ${NAD2BIN_SRC}) +target_link_libraries(nad2bin ${PROJ_LIBRARIES}) +install(TARGETS nad2bin + RUNTIME DESTINATION ${BINDIR}) + diff --git a/proj4/src/bin_proj.cmake b/proj4/src/bin_proj.cmake new file mode 100644 index 000000000000..f20d2f3fac90 --- /dev/null +++ b/proj4/src/bin_proj.cmake @@ -0,0 +1,19 @@ +set(PROJ_SRC proj.c + gen_cheb.c + p_series.c) + +source_group("Source Files\\Bin" FILES ${PROJ_SRC}) + +if(WIN32) + set(PROJ_SRC ${PROJ_SRC} emess.c) +endif(WIN32) + +#Executable +add_executable(binproj ${PROJ_SRC}) +set_target_properties(binproj + PROPERTIES + OUTPUT_NAME proj) +target_link_libraries(binproj ${PROJ_LIBRARIES}) +install(TARGETS binproj + RUNTIME DESTINATION ${BINDIR}) + diff --git a/proj4/src/biveval.c b/proj4/src/biveval.c new file mode 100644 index 000000000000..59021ee57841 --- /dev/null +++ b/proj4/src/biveval.c @@ -0,0 +1,87 @@ +/* procedures for evaluating Tseries */ +# include +# define NEAR_ONE 1.00001 +static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) { + double d=0, dd=0, vd, vdd, tmp, *c; + int j; + + 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 */ +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 /* bivariate power polynomial entry point */ +bpseval(projUV in, Tseries *T) { + 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) != 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 */ +biveval(projUV in, Tseries *T) { + + if (T->power) { + return bpseval(in, T); + } else { + return bcheval(in, T); + } +} + diff --git a/proj4/src/cs2cs.c b/proj4/src/cs2cs.c new file mode 100644 index 000000000000..903693262c12 --- /dev/null +++ b/proj4/src/cs2cs.c @@ -0,0 +1,455 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Mainline program sort of like ``proj'' for converting between + * two coordinate systems. + * Author: Frank Warmerdam, warmerda@home.com + * + ****************************************************************************** + * Copyright (c) 2000, 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 +#include +#include +#include +#include +#include "emess.h" +#include + +#define MAX_LINE 1000 +#define MAX_PARGS 100 + +static projPJ fromProj, toProj; + +static int +reversein = 0, /* != 0 reverse input arguments */ +reverseout = 0, /* != 0 reverse output arguments */ +echoin = 0, /* echo input data to output line */ +tag = '#'; /* beginning of line tag character */ + static char +*oform = (char *)0, /* output format for x-y or decimal degrees */ +*oterr = "*\t*", /* output line for unprojectable input */ +*usage = +"%s\nusage: %s [ -eEfIlrstvwW [args] ] [ +opts[=arg] ]\n" +" [+to [+opts[=arg] [ files ]\n"; + +static double (*informat)(const char *, + char **); /* input data deformatter function */ + + +/************************************************************************/ +/* process() */ +/* */ +/* File processing function. */ +/************************************************************************/ +static void process(FILE *fid) + +{ + char line[MAX_LINE+3], *s, pline[40]; + projUV data; + + for (;;) { + double z; + + ++emess_dat.File_line; + if (!(s = fgets(line, MAX_LINE, fid))) + break; + if (!strchr(s, '\n')) { /* overlong line */ + int c; + (void)strcat(s, "\n"); + /* gobble up to newline */ + while ((c = fgetc(fid)) != EOF && c != '\n') ; + } + if (*s == tag) { + fputs(line, stdout); + continue; + } + + if (reversein) { + data.v = (*informat)(s, &s); + data.u = (*informat)(s, &s); + } else { + data.u = (*informat)(s, &s); + data.v = (*informat)(s, &s); + } + + z = strtod( s, &s ); + + if (data.v == HUGE_VAL) + data.u = HUGE_VAL; + + if (!*s && (s > line)) --s; /* assumed we gobbled \n */ + + if ( echoin) { + int t; + t = *s; + *s = '\0'; + (void)fputs(line, stdout); + *s = t; + putchar('\t'); + } + + if (data.u != HUGE_VAL) { + if( pj_transform( fromProj, toProj, 1, 0, + &(data.u), &(data.v), &z ) != 0 ) + { + data.u = HUGE_VAL; + data.v = HUGE_VAL; + emess(-3,"pj_transform(): %s", pj_strerrno(pj_errno)); + } + } + + if (data.u == HUGE_VAL) /* error output */ + fputs(oterr, stdout); + + else if (pj_is_latlong(toProj) && !oform) { /*ascii DMS output */ + if (reverseout) { + fputs(rtodms(pline, data.v, 'N', 'S'), stdout); + putchar('\t'); + fputs(rtodms(pline, data.u, 'E', 'W'), stdout); + } else { + fputs(rtodms(pline, data.u, 'E', 'W'), stdout); + putchar('\t'); + fputs(rtodms(pline, data.v, 'N', 'S'), stdout); + } + + } else { /* x-y or decimal degree ascii output */ + if ( pj_is_latlong(toProj) ) { + data.v *= RAD_TO_DEG; + data.u *= RAD_TO_DEG; + } + if (reverseout) { + printf(oform,data.v); putchar('\t'); + printf(oform,data.u); + } else { + printf(oform,data.u); putchar('\t'); + printf(oform,data.v); + } + } + + putchar(' '); + if( oform != NULL ) + printf( oform, z ); + else + printf( "%.3f", z ); + if( s ) + printf( "%s", s ); + else + printf( "\n" ); + } +} + +/************************************************************************/ +/* main() */ +/************************************************************************/ + +int main(int argc, char **argv) +{ + char *arg, **eargv = argv, *from_argv[MAX_PARGS], *to_argv[MAX_PARGS]; + FILE *fid; + int from_argc=0, to_argc=0, eargc = 0, c, mon = 0; + int have_to_flag = 0, inverse = 0, i; + int use_env_locale = 0; + + /* This is just to check that pj_init() is locale-safe */ + /* Used by nad/testvarious */ + if( getenv("PROJ_USE_ENV_LOCALE") != NULL ) + use_env_locale = 1; + + if ((emess_dat.Prog_name = strrchr(*argv,DIR_CHAR)) != NULL) + ++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 'v': /* monitor dump of initialization */ + mon = 1; + continue; + case 'I': /* alt. method to spec inverse */ + inverse = 1; + continue; + case 'E': /* echo ascii input to ascii output */ + echoin = 1; + continue; + case 't': /* set col. one char */ + if (arg[1]) tag = *++arg; + else emess(1,"missing -t col. 1 tag"); + continue; + case 'l': /* list projections, ellipses or units */ + if (!arg[1] || arg[1] == 'p' || arg[1] == 'P') { + /* list projections */ + struct PJ_LIST *lp; + int do_long = arg[1] == 'P', c; + char *str; + + for (lp = pj_get_list_ref() ; lp->id ; ++lp) { + (void)printf("%s : ", lp->id); + if (do_long) /* possibly multiline description */ + (void)puts(*lp->descr); + else { /* first line, only */ + str = *lp->descr; + while ((c = *str++) && c != '\n') + putchar(c); + putchar('\n'); + } + } + } else if (arg[1] == '=') { /* list projection 'descr' */ + struct PJ_LIST *lp; + + arg += 2; + for (lp = pj_get_list_ref() ; lp->id ; ++lp) + if (!strcmp(lp->id, arg)) { + (void)printf("%9s : %s\n", lp->id, *lp->descr); + break; + } + } else if (arg[1] == 'e') { /* list ellipses */ + 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 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 if (arg[1] == 'd') { /* list datums */ + struct PJ_DATUMS *ld; + + printf("__datum_id__ __ellipse___ __definition/comments______________________________\n" ); + for (ld = pj_get_datums_ref(); ld->id ; ++ld) + { + printf("%12s %-12s %-30s\n", + ld->id, ld->ellipse_id, ld->defn); + if( ld->comments != NULL && strlen(ld->comments) > 0 ) + printf( "%25s %s\n", " ", ld->comments ); + } + } else if( arg[1] == 'm') { /* list prime meridians */ + struct PJ_PRIME_MERIDIANS *lpm; + + for (lpm = pj_get_prime_meridians_ref(); lpm->id ; ++lpm) + (void)printf("%12s %-30s\n", + lpm->id, lpm->defn); + } else + emess(1,"invalid list option: l%c",arg[1]); + exit(0); + continue; /* artificial */ + case 'e': /* error line alternative */ + if (--argc <= 0) + noargument: + emess(1,"missing argument for -%c",*arg); + oterr = *++argv; + continue; + case 'W': /* specify seconds precision */ + case 'w': /* -W for constant field width */ + if ((c = arg[1]) != 0 && 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) goto noargument; + oform = *++argv; + continue; + case 'r': /* reverse input */ + reversein = 1; + continue; + case 's': /* reverse output */ + reverseout = 1; + continue; + case 'd': /* set debug level */ + if (--argc <= 0) goto noargument; + pj_ctx_set_debug( pj_get_default_ctx(), atoi(*++argv)); + continue; + default: + emess(1, "invalid option: -%c",*arg); + break; + } + break; + + } else if (strcmp(*argv,"+to") == 0 ) { + have_to_flag = 1; + + } else if (**argv == '+') { /* + argument */ + if( have_to_flag ) + { + if( to_argc < MAX_PARGS ) + to_argv[to_argc++] = *argv + 1; + else + emess(1,"overflowed + argument table"); + } + else + { + if (from_argc < MAX_PARGS) + from_argv[from_argc++] = *argv + 1; + else + emess(1,"overflowed + argument table"); + } + } else /* assumed to be input file name(s) */ + eargv[eargc++] = *argv; + } + if (eargc == 0 ) /* if no specific files force sysin */ + eargv[eargc++] = "-"; + + /* + * If the user has requested inverse, then just reverse the + * coordinate systems. + */ + if( inverse ) + { + int argcount; + + for( i = 0; i < MAX_PARGS; i++ ) + { + char *arg; + + arg = from_argv[i]; + from_argv[i] = to_argv[i]; + to_argv[i] = arg; + } + + argcount = from_argc; + from_argc = to_argc; + to_argc = argcount; + } + + if( use_env_locale ) + { + /* Set locale from environment */ + setlocale(LC_ALL, ""); + } + + if( from_argc == 0 && to_argc != 0 ) + { + /* we will generate the from proj as the latlong of the +to in a bit */ + } + else if (!(fromProj = pj_init(from_argc, from_argv))) + { + printf( "Using from definition: " ); + for( i = 0; i < from_argc; i++ ) + printf( "%s ", from_argv[i] ); + printf( "\n" ); + + emess(3,"projection initialization failure\ncause: %s", + pj_strerrno(pj_errno)); + } + + if( to_argc == 0 ) + { + if (!(toProj = pj_latlong_from_proj( fromProj ))) + { + printf( "Using to definition: " ); + for( i = 0; i < to_argc; i++ ) + printf( "%s ", to_argv[i] ); + printf( "\n" ); + + emess(3,"projection initialization failure\ncause: %s", + pj_strerrno(pj_errno)); + } + } + else if (!(toProj = pj_init(to_argc, to_argv))) + { + printf( "Using to definition: " ); + for( i = 0; i < to_argc; i++ ) + printf( "%s ", to_argv[i] ); + printf( "\n" ); + + emess(3,"projection initialization failure\ncause: %s", + pj_strerrno(pj_errno)); + } + + if( from_argc == 0 && toProj != NULL) + { + if (!(fromProj = pj_latlong_from_proj( toProj ))) + { + printf( "Using to definition: " ); + for( i = 0; i < to_argc; i++ ) + printf( "%s ", to_argv[i] ); + printf( "\n" ); + + emess(3,"projection initialization failure\ncause: %s", + pj_strerrno(pj_errno)); + } + } + + if( use_env_locale ) + { + /* Restore C locale to avoid issues in parsing/outputing numbers*/ + setlocale(LC_ALL, "C"); + } + + if (mon) { + printf( "%c ---- From Coordinate System ----\n", tag ); + pj_pr_list(fromProj); + printf( "%c ---- To Coordinate System ----\n", tag ); + pj_pr_list(toProj); + } + + /* set input formating control */ + if( !fromProj->is_latlong ) + informat = strtod; + else { + informat = dmstor; + } + + if( !toProj->is_latlong && !oform ) + oform = "%.2f"; + + /* process input file list */ + for ( ; eargc-- ; ++eargv) { + if (**eargv == '-') { + fid = stdin; + emess_dat.File_name = ""; + + } else { + if ((fid = fopen(*eargv, "rt")) == NULL) { + emess(-2, *eargv, "input file"); + continue; + } + emess_dat.File_name = *eargv; + } + emess_dat.File_line = 0; + process(fid); + fclose(fid); + emess_dat.File_name = 0; + } + + if( fromProj != NULL ) + pj_free( fromProj ); + if( toProj != NULL ) + pj_free( toProj ); + + pj_deallocate_grids(); + + exit(0); /* normal completion */ +} diff --git a/proj4/src/dmstor.c b/proj4/src/dmstor.c new file mode 100644 index 000000000000..9665d5a9bd15 --- /dev/null +++ b/proj4/src/dmstor.c @@ -0,0 +1,113 @@ +/* Convert DMS string to radians */ +#include +#include +#include + +static double proj_strtod(char *nptr, char **endptr); + +/* following should be sufficient for all but the rediculous */ +#define MAX_WORK 64 + static const char +*sym = "NnEeSsWw"; + static const double +vm[] = { + DEG_TO_RAD, + .0002908882086657216, + .0000048481368110953599 +}; + 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; + + if (rs) + *rs = (char *)is; + /* copy sting into work space */ + while (isspace(sign = *is)) ++is; + for (n = MAX_WORK, s = work, p = (char *)is; isgraph(*p) && --n ; ) + *s++ = *p++; + *s = '\0'; + /* it is possible that a really odd input (like lots of leading + zeros) could be truncated in copying into work. But ... */ + sign = *(s = work); + if (sign == '+' || sign == '-') s++; + else sign = '+'; + for (v = 0., nl = 0 ; nl < 3 ; nl = n + 1 ) { + if (!(isdigit(*s) || *s == '.')) break; + if ((tv = proj_strtod(s, &s)) == HUGE_VAL) + return tv; + switch (*s) { + case 'D': case 'd': + n = 0; break; + case '\'': + n = 1; break; + case '"': + n = 2; break; + case 'r': case 'R': + if (nl) { + pj_ctx_set_errno( ctx, -16 ); + return HUGE_VAL; + } + ++s; + v = tv; + goto skip; + default: + v += tv * vm[nl]; + skip: n = 4; + continue; + } + if (n < nl) { + pj_ctx_set_errno( ctx, -16 ); + return HUGE_VAL; + } + v += tv * vm[n]; + ++s; + } + /* postfix sign */ + if (*s && (p = strchr(sym, *s))) { + sign = (p - sym) >= 4 ? '-' : '+'; + ++s; + } + if (sign == '-') + v = -v; + if (rs) /* return point of next char after valid string */ + *rs = (char *)is + (s - work); + return v; +} + +static double +proj_strtod(char *nptr, char **endptr) + +{ + char c, *cp = nptr; + double result; + + /* + * Scan for characters which cause problems with VC++ strtod() + */ + while ((c = *cp) != '\0') { + if (c == 'd' || c == 'D') { + + /* + * Found one, so NUL it out, call strtod(), + * then restore it and return + */ + *cp = '\0'; + result = strtod(nptr, endptr); + *cp = c; + return result; + } + ++cp; + } + + /* no offending characters, just handle normally */ + + return pj_strtod(nptr, endptr); +} + diff --git a/proj4/src/emess.c b/proj4/src/emess.c new file mode 100644 index 000000000000..0c7f6c9e9716 --- /dev/null +++ b/proj4/src/emess.c @@ -0,0 +1,57 @@ +/* Error message processing */ + +#ifdef _MSC_VER +# ifndef _CRT_SECURE_NO_DEPRECATE +# define _CRT_SECURE_NO_DEPRECATE +# endif +# ifndef _CRT_NONSTDC_NO_DEPRECATE +# define _CRT_NONSTDC_NO_DEPRECATE +# endif +#endif + +#include +#include +#include +#include +#include +#include +#define EMESS_ROUTINE +#include "emess.h" + void +emess(int code, char *fmt, ...) { + va_list args; + + va_start(args, fmt); + /* prefix program name, if given */ + if (fmt != NULL) + (void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(), + emess_dat.Prog_name); + /* print file name and line, if given */ + if (emess_dat.File_name != NULL && *emess_dat.File_name) { + (void)fprintf(stderr,"while processing file: %s", emess_dat.File_name); + if (emess_dat.File_line > 0) + (void)fprintf(stderr,", line %d\n", emess_dat.File_line); + else + (void)fputc('\n', stderr); + } else + putc('\n', stderr); + /* if |code|==2, print errno code data */ + if (code == 2 || code == -2) + (void)fprintf(stderr, "Sys errno: %d: %s\n", + errno, +#ifdef HAVE_STRERROR + strerror(errno)); +#else + ""); +#endif + /* post remainder of call data */ + (void)vfprintf(stderr,fmt,args); + va_end(args); + /* die if code positive */ + if (code > 0) { + (void)fputs("\nprogram abnormally terminated\n", stderr); + exit(code); + } + else + putc('\n', stderr); +} diff --git a/proj4/src/emess.h b/proj4/src/emess.h new file mode 100644 index 000000000000..4106e11da43a --- /dev/null +++ b/proj4/src/emess.h @@ -0,0 +1,28 @@ +/* Error message processing header file */ +#ifndef EMESS_H +#define EMESS_H + +struct EMESS { + char *File_name, /* input file name */ + *Prog_name; /* name of program */ + int File_line; /* approximate line read + where error occured */ +}; + +#ifdef EMESS_ROUTINE /* use type */ +/* for emess procedure */ +struct EMESS emess_dat = { (char *)0, (char *)0, 0 }; + +#ifdef sun /* Archaic SunOs 4.1.1, etc. */ +extern char *sys_errlist[]; +#define strerror(n) (sys_errlist[n]) +#endif + +#else /* for for calling procedures */ + +extern struct EMESS emess_dat; +void emess(int, char *, ...); + +#endif /* use type */ + +#endif /* end EMESS_H */ diff --git a/proj4/src/gen_cheb.c b/proj4/src/gen_cheb.c new file mode 100644 index 000000000000..b7c41d822a0f --- /dev/null +++ b/proj4/src/gen_cheb.c @@ -0,0 +1,71 @@ +/* generates 'T' option output */ +#define PJ_LIB__ +#include "projects.h" +#include +#include +#include +#include "emess.h" +#ifndef COEF_LINE_MAX +#define COEF_LINE_MAX 60 +#endif + void +gen_cheb(int inverse, projUV (*proj)(projUV), char *s, PJ *P, int iargc, char **iargv) { + int NU = 15, NV = 15, res = -1, errin = 0, pwr; + char *arg, fmt[15]; + projUV low, upp, resid; + Tseries *F; + extern void p_series(Tseries *, FILE *, char *); + double (*input)(const char *, char **); + + input = inverse ? strtod : dmstor; + if (*s) low.u = input(s, &s); else { low.u = 0; ++errin; } + if (*s == ',') upp.u = input(s+1, &s); else { upp.u = 0; ++errin; } + if (*s == ',') low.v = input(s+1, &s); else { low.v = 0; ++errin; } + if (*s == ',') upp.v = input(s+1, &s); else { upp.v = 0; ++errin; } + if (errin) + emess(16,"null or absent -T parameters"); + if (*s == ',') if (*++s != ',') res = strtol(s, &s, 10); + if (*s == ',') if (*++s != ',') NU = strtol(s, &s, 10); + if (*s == ',') if (*++s != ',') NV = strtol(s, &s, 10); + pwr = s && *s && !strcmp(s, ",P"); + (void)printf("#proj_%s\n# run-line:\n", + pwr ? "Power" : "Chebyshev"); + if (iargc > 0) { /* proj execution audit trail */ + int n = 0, L; + + for ( ; iargc ; --iargc) { + arg = *iargv++; + if (*arg != '+') { + if (!n) { putchar('#'); ++n; } + (void)printf(" %s%n",arg, &L); + if ((n += L) > 50) { putchar('\n'); n = 0; } + } + } + if (n) putchar('\n'); + } + (void)printf("# projection parameters\n"); + pj_pr_list(P); + if (low.u == upp.u || low.v >= upp.v) + emess(16,"approx. argument range error"); + if (low.u > upp.u) + low.u -= M_TWOPI; + if (NU < 2 || NV < 2) + emess(16,"approx. work dimensions (%d %d) too small",NU,NV); + if (!(F = mk_cheby(low, upp, pow(10., (double)res)*.5, &resid, proj, + NU, NV, pwr))) + emess(16,"generation of approx failed\nreason: %s\n", + pj_strerrno(errno)); + (void)printf("%c,%.12g,%.12g,%.12g,%.12g,%.12g\n",inverse?'I':'F', + P->lam0*RAD_TO_DEG, + low.u*(inverse?1.:RAD_TO_DEG),upp.u*(inverse?1.:RAD_TO_DEG), + low.v*(inverse?1.:RAD_TO_DEG),upp.v*(inverse?1.:RAD_TO_DEG)); + if (pwr) + strcpy(fmt, "%.15g"); + else if (res <= 0) + (void)sprintf(fmt,"%%.%df",-res+1); + else + (void)strcpy(fmt,"%.0f"); + p_series(F, stdout, fmt); + (void)printf("# |u,v| sums %g %g\n#end_proj_%s\n", + resid.u, resid.v, pwr ? "Power" : "Chebyshev"); +} diff --git a/proj4/src/geocent.c b/proj4/src/geocent.c new file mode 100644 index 000000000000..6ac6c40b060d --- /dev/null +++ b/proj4/src/geocent.c @@ -0,0 +1,432 @@ +/***************************************************************************/ +/* RSC IDENTIFIER: GEOCENTRIC + * + * ABSTRACT + * + * This component provides conversions between Geodetic coordinates (latitude, + * longitude in radians and height in meters) and Geocentric coordinates + * (X, Y, Z) in meters. + * + * ERROR HANDLING + * + * This component checks parameters for valid values. If an invalid value + * is found, the error code is combined with the current error code using + * the bitwise or. This combining allows multiple error codes to be + * returned. The possible error codes are: + * + * GEOCENT_NO_ERROR : No errors occurred in function + * GEOCENT_LAT_ERROR : Latitude out of valid range + * (-90 to 90 degrees) + * GEOCENT_LON_ERROR : Longitude out of valid range + * (-180 to 360 degrees) + * GEOCENT_A_ERROR : Semi-major axis lessthan or equal to zero + * GEOCENT_B_ERROR : Semi-minor axis lessthan or equal to zero + * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis + * + * + * REUSE NOTES + * + * GEOCENTRIC is intended for reuse by any application that performs + * coordinate conversions between geodetic coordinates and geocentric + * coordinates. + * + * + * REFERENCES + * + * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, + * Ralph Toms, February 1996 UCRL-JC-123138. + * + * Further information on GEOCENTRIC can be found in the Reuse Manual. + * + * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center + * Geospatial Information Division + * 7701 Telegraph Road + * Alexandria, VA 22310-3864 + * + * LICENSES + * + * None apply to this component. + * + * RESTRICTIONS + * + * GEOCENTRIC has no restrictions. + * + * ENVIRONMENT + * + * GEOCENTRIC was tested and certified in the following environments: + * + * 1. Solaris 2.5 with GCC version 2.8.1 + * 2. Windows 95 with MS Visual C++ version 6 + * + * MODIFICATIONS + * + * Date Description + * ---- ----------- + * 25-02-97 Original Code + * + */ + + +/***************************************************************************/ +/* + * INCLUDES + */ +#include +#include "geocent.h" +/* + * math.h - is needed for calls to sin, cos, tan and sqrt. + * geocent.h - is needed for Error codes and prototype error checking. + */ + + +/***************************************************************************/ +/* + * DEFINES + */ +#define PI 3.14159265358979323e0 +#define PI_OVER_2 (PI / 2.0e0) +#define FALSE 0 +#define TRUE 1 +#define COS_67P5 0.38268343236508977 /* cosine of 67.5 degrees */ +#define AD_C 1.0026000 /* Toms region 1 constant */ + + +/***************************************************************************/ +/* + * FUNCTIONS + */ + + +long pj_Set_Geocentric_Parameters (GeocentricInfo *gi, double a, double b) + +{ /* BEGIN Set_Geocentric_Parameters */ +/* + * The function Set_Geocentric_Parameters receives the ellipsoid parameters + * as inputs and sets the corresponding state variables. + * + * a : Semi-major axis, in meters. (input) + * b : Semi-minor axis, in meters. (input) + */ + long Error_Code = GEOCENT_NO_ERROR; + + if (a <= 0.0) + Error_Code |= GEOCENT_A_ERROR; + if (b <= 0.0) + Error_Code |= GEOCENT_B_ERROR; + if (a < b) + Error_Code |= GEOCENT_A_LESS_B_ERROR; + if (!Error_Code) + { + gi->Geocent_a = a; + gi->Geocent_b = b; + gi->Geocent_a2 = a * a; + gi->Geocent_b2 = b * b; + gi->Geocent_e2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_a2; + gi->Geocent_ep2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_b2; + } + return (Error_Code); +} /* END OF Set_Geocentric_Parameters */ + + +void pj_Get_Geocentric_Parameters (GeocentricInfo *gi, + double *a, + double *b) +{ /* BEGIN Get_Geocentric_Parameters */ +/* + * The function Get_Geocentric_Parameters returns the ellipsoid parameters + * to be used in geocentric coordinate conversions. + * + * a : Semi-major axis, in meters. (output) + * b : Semi-minor axis, in meters. (output) + */ + + *a = gi->Geocent_a; + *b = gi->Geocent_b; +} /* END OF Get_Geocentric_Parameters */ + + +long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo *gi, + double Latitude, + double Longitude, + double Height, + double *X, + double *Y, + double *Z) +{ /* BEGIN Convert_Geodetic_To_Geocentric */ +/* + * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates + * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), + * according to the current ellipsoid parameters. + * + * Latitude : Geodetic latitude in radians (input) + * Longitude : Geodetic longitude in radians (input) + * Height : Geodetic height, in meters (input) + * X : Calculated Geocentric X coordinate, in meters (output) + * Y : Calculated Geocentric Y coordinate, in meters (output) + * Z : Calculated Geocentric Z coordinate, in meters (output) + * + */ + long Error_Code = GEOCENT_NO_ERROR; + double Rn; /* Earth radius at location */ + double Sin_Lat; /* sin(Latitude) */ + double Sin2_Lat; /* Square of sin(Latitude) */ + double Cos_Lat; /* cos(Latitude) */ + + /* + ** Don't blow up if Latitude is just a little out of the value + ** range as it may just be a rounding issue. Also removed longitude + ** test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001. + */ + if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 ) + Latitude = -PI_OVER_2; + else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 ) + Latitude = PI_OVER_2; + else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2)) + { /* Latitude out of range */ + Error_Code |= GEOCENT_LAT_ERROR; + } + + if (!Error_Code) + { /* no errors */ + if (Longitude > PI) + Longitude -= (2*PI); + Sin_Lat = sin(Latitude); + Cos_Lat = cos(Latitude); + Sin2_Lat = Sin_Lat * Sin_Lat; + Rn = gi->Geocent_a / (sqrt(1.0e0 - gi->Geocent_e2 * Sin2_Lat)); + *X = (Rn + Height) * Cos_Lat * cos(Longitude); + *Y = (Rn + Height) * Cos_Lat * sin(Longitude); + *Z = ((Rn * (1 - gi->Geocent_e2)) + Height) * Sin_Lat; + + } + return (Error_Code); +} /* END OF Convert_Geodetic_To_Geocentric */ + +/* + * The function Convert_Geocentric_To_Geodetic converts geocentric + * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, + * and height), according to the current ellipsoid parameters. + * + * X : Geocentric X coordinate, in meters. (input) + * Y : Geocentric Y coordinate, in meters. (input) + * Z : Geocentric Z coordinate, in meters. (input) + * Latitude : Calculated latitude value in radians. (output) + * Longitude : Calculated longitude value in radians. (output) + * Height : Calculated height value, in meters. (output) + */ + +#define USE_ITERATIVE_METHOD + +void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, + double X, + double Y, + double Z, + double *Latitude, + double *Longitude, + double *Height) +{ /* BEGIN Convert_Geocentric_To_Geodetic */ +#if !defined(USE_ITERATIVE_METHOD) +/* + * The method used here is derived from 'An Improved Algorithm for + * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996 + */ + +/* Note: Variable names follow the notation used in Toms, Feb 1996 */ + + double W; /* distance from Z axis */ + double W2; /* square of distance from Z axis */ + double T0; /* initial estimate of vertical component */ + double T1; /* corrected estimate of vertical component */ + double S0; /* initial estimate of horizontal component */ + double S1; /* corrected estimate of horizontal component */ + double Sin_B0; /* sin(B0), B0 is estimate of Bowring aux variable */ + double Sin3_B0; /* cube of sin(B0) */ + double Cos_B0; /* cos(B0) */ + double Sin_p1; /* sin(phi1), phi1 is estimated latitude */ + double Cos_p1; /* cos(phi1) */ + double Rn; /* Earth radius at location */ + double Sum; /* numerator of cos(phi1) */ + int At_Pole; /* indicates location is in polar region */ + + At_Pole = FALSE; + if (X != 0.0) + { + *Longitude = atan2(Y,X); + } + else + { + if (Y > 0) + { + *Longitude = PI_OVER_2; + } + else if (Y < 0) + { + *Longitude = -PI_OVER_2; + } + else + { + At_Pole = TRUE; + *Longitude = 0.0; + if (Z > 0.0) + { /* north pole */ + *Latitude = PI_OVER_2; + } + else if (Z < 0.0) + { /* south pole */ + *Latitude = -PI_OVER_2; + } + else + { /* center of earth */ + *Latitude = PI_OVER_2; + *Height = -Geocent_b; + return; + } + } + } + W2 = X*X + Y*Y; + W = sqrt(W2); + T0 = Z * AD_C; + S0 = sqrt(T0 * T0 + W2); + Sin_B0 = T0 / S0; + Cos_B0 = W / S0; + Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0; + T1 = Z + gi->Geocent_b * gi->Geocent_ep2 * Sin3_B0; + Sum = W - gi->Geocent_a * gi->Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0; + S1 = sqrt(T1*T1 + Sum * Sum); + Sin_p1 = T1 / S1; + Cos_p1 = Sum / S1; + Rn = gi->Geocent_a / sqrt(1.0 - gi->Geocent_e2 * Sin_p1 * Sin_p1); + if (Cos_p1 >= COS_67P5) + { + *Height = W / Cos_p1 - Rn; + } + else if (Cos_p1 <= -COS_67P5) + { + *Height = W / -Cos_p1 - Rn; + } + else + { + *Height = Z / Sin_p1 + Rn * (gi->Geocent_e2 - 1.0); + } + if (At_Pole == FALSE) + { + *Latitude = atan(Sin_p1 / Cos_p1); + } +#else /* defined(USE_ITERATIVE_METHOD) */ +/* +* Reference... +* ============ +* Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für +* das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover +* Nr. 137, p. 130-131. + +* Programmed by GGA- Leibniz-Institue of Applied Geophysics +* Stilleweg 2 +* D-30655 Hannover +* Federal Republic of Germany +* Internet: www.gga-hannover.de +* +* Hannover, March 1999, April 2004. +* see also: comments in statements +* remarks: +* Mathematically exact and because of symmetry of rotation-ellipsoid, +* each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and +* (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even +* four solutions, every two symmetrical to the semi-minor axis. +* Here Height1 and Height2 have at least a difference in order of +* radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b); +* (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or +* (0.,225.,-(2a+100.))). +* The algorithm always computes (Latitude,Longitude) with smallest |Height|. +* For normal computations, that means |Height|<10000.m, algorithm normally +* converges after to 2-3 steps!!! +* But if |Height| has the amount of length of ellipsoid's axis +* (e.g. -6300000.m), algorithm needs about 15 steps. +*/ + +/* local defintions and variables */ +/* end-criterium of loop, accuracy of sin(Latitude) */ +#define genau 1.E-12 +#define genau2 (genau*genau) +#define maxiter 30 + + double P; /* distance between semi-minor axis and location */ + double RR; /* distance between center and location */ + double CT; /* sin of geocentric latitude */ + double ST; /* cos of geocentric latitude */ + double RX; + double RK; + double RN; /* Earth radius at location */ + double CPHI0; /* cos of start or old geodetic latitude in iterations */ + double SPHI0; /* sin of start or old geodetic latitude in iterations */ + double CPHI; /* cos of searched geodetic latitude */ + double SPHI; /* sin of searched geodetic latitude */ + double SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ + int iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ + + P = sqrt(X*X+Y*Y); + RR = sqrt(X*X+Y*Y+Z*Z); + +/* special cases for latitude and longitude */ + if (P/gi->Geocent_a < genau) { + +/* special case, if P=0. (X=0., Y=0.) */ + *Longitude = 0.; + +/* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis + * of ellipsoid (=center of mass), Latitude becomes PI/2 */ + if (RR/gi->Geocent_a < genau) { + *Latitude = PI_OVER_2; + *Height = -gi->Geocent_b; + return ; + + } + } + else { +/* ellipsoidal (geodetic) longitude + * interval: -PI < Longitude <= +PI */ + *Longitude=atan2(Y,X); + } + +/* -------------------------------------------------------------- + * Following iterative algorithm was developped by + * "Institut für Erdmessung", University of Hannover, July 1988. + * Internet: www.ife.uni-hannover.de + * Iterative computation of CPHI,SPHI and Height. + * Iteration of CPHI and SPHI to 10**-12 radian resp. + * 2*10**-7 arcsec. + * -------------------------------------------------------------- + */ + CT = Z/RR; + ST = P/RR; + RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST); + CPHI0 = ST*(1.0-gi->Geocent_e2)*RX; + SPHI0 = CT*RX; + iter = 0; + +/* loop to find sin(Latitude) resp. Latitude + * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ + do + { + iter++; + RN = gi->Geocent_a/sqrt(1.0-gi->Geocent_e2*SPHI0*SPHI0); + +/* ellipsoidal (geodetic) height */ + *Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi->Geocent_e2*SPHI0*SPHI0); + + RK = gi->Geocent_e2*RN/(RN+*Height); + RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST); + CPHI = ST*(1.0-RK)*RX; + SPHI = CT*RX; + SDPHI = SPHI*CPHI0-CPHI*SPHI0; + CPHI0 = CPHI; + SPHI0 = SPHI; + } + while (SDPHI*SDPHI > genau2 && iter < maxiter); + +/* ellipsoidal (geodetic) latitude */ + *Latitude=atan(SPHI/fabs(CPHI)); + + return; +#endif /* defined(USE_ITERATIVE_METHOD) */ +} /* END OF Convert_Geocentric_To_Geodetic */ diff --git a/proj4/src/geocent.h b/proj4/src/geocent.h new file mode 100644 index 000000000000..d6e90d233aea --- /dev/null +++ b/proj4/src/geocent.h @@ -0,0 +1,179 @@ +#ifndef GEOCENT_H +#define GEOCENT_H + +/***************************************************************************/ +/* RSC IDENTIFIER: GEOCENTRIC + * + * ABSTRACT + * + * This component provides conversions between Geodetic coordinates (latitude, + * longitude in radians and height in meters) and Geocentric coordinates + * (X, Y, Z) in meters. + * + * ERROR HANDLING + * + * This component checks parameters for valid values. If an invalid value + * is found, the error code is combined with the current error code using + * the bitwise or. This combining allows multiple error codes to be + * returned. The possible error codes are: + * + * GEOCENT_NO_ERROR : No errors occurred in function + * GEOCENT_LAT_ERROR : Latitude out of valid range + * (-90 to 90 degrees) + * GEOCENT_LON_ERROR : Longitude out of valid range + * (-180 to 360 degrees) + * GEOCENT_A_ERROR : Semi-major axis less than or equal to zero + * GEOCENT_B_ERROR : Semi-minor axis less than or equal to zero + * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis + * + * + * REUSE NOTES + * + * GEOCENTRIC is intended for reuse by any application that performs + * coordinate conversions between geodetic coordinates and geocentric + * coordinates. + * + * + * REFERENCES + * + * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, + * Ralph Toms, February 1996 UCRL-JC-123138. + * + * Further information on GEOCENTRIC can be found in the Reuse Manual. + * + * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center + * Geospatial Information Division + * 7701 Telegraph Road + * Alexandria, VA 22310-3864 + * + * LICENSES + * + * None apply to this component. + * + * RESTRICTIONS + * + * GEOCENTRIC has no restrictions. + * + * ENVIRONMENT + * + * GEOCENTRIC was tested and certified in the following environments: + * + * 1. Solaris 2.5 with GCC version 2.8.1 + * 2. Windows 95 with MS Visual C++ version 6 + * + * MODIFICATIONS + * + * Date Description + * ---- ----------- + * + * + */ + + +/***************************************************************************/ +/* + * DEFINES + */ +#define GEOCENT_NO_ERROR 0x0000 +#define GEOCENT_LAT_ERROR 0x0001 +#define GEOCENT_LON_ERROR 0x0002 +#define GEOCENT_A_ERROR 0x0004 +#define GEOCENT_B_ERROR 0x0008 +#define GEOCENT_A_LESS_B_ERROR 0x0010 + + +/***************************************************************************/ +/* + * FUNCTION PROTOTYPES + */ + +/* ensure proper linkage to c++ programs */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct +{ + double Geocent_a; /* Semi-major axis of ellipsoid in meters */ + double Geocent_b; /* Semi-minor axis of ellipsoid */ + double Geocent_a2; /* Square of semi-major axis */ + double Geocent_b2; /* Square of semi-minor axis */ + double Geocent_e2; /* Eccentricity squared */ + double Geocent_ep2; /* 2nd eccentricity squared */ +} GeocentricInfo; + +void pj_Init_Geocentric( GeocentricInfo *gi ); +long pj_Set_Geocentric_Parameters( GeocentricInfo *gi, + double a, + double b); + +/* + * The function Set_Geocentric_Parameters receives the ellipsoid parameters + * as inputs and sets the corresponding state variables. + * + * a : Semi-major axis, in meters. (input) + * b : Semi-minor axis, in meters. (input) + */ + + +void pj_Get_Geocentric_Parameters ( GeocentricInfo *gi, + double *a, + double *b); + +/* + * The function Get_Geocentric_Parameters returns the ellipsoid parameters + * to be used in geocentric coordinate conversions. + * + * a : Semi-major axis, in meters. (output) + * b : Semi-minor axis, in meters. (output) + */ + + +long pj_Convert_Geodetic_To_Geocentric ( GeocentricInfo *gi, + double Latitude, + double Longitude, + double Height, + double *X, + double *Y, + double *Z); +/* + * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates + * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), + * according to the current ellipsoid parameters. + * + * Latitude : Geodetic latitude in radians (input) + * Longitude : Geodetic longitude in radians (input) + * Height : Geodetic height, in meters (input) + * X : Calculated Geocentric X coordinate, in meters. (output) + * Y : Calculated Geocentric Y coordinate, in meters. (output) + * Z : Calculated Geocentric Z coordinate, in meters. (output) + * + */ + + +void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, + double X, + double Y, + double Z, + double *Latitude, + double *Longitude, + double *Height); +/* + * The function Convert_Geocentric_To_Geodetic converts geocentric + * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, + * and height), according to the current ellipsoid parameters. + * + * X : Geocentric X coordinate, in meters. (input) + * Y : Geocentric Y coordinate, in meters. (input) + * Z : Geocentric Z coordinate, in meters. (input) + * Latitude : Calculated latitude value in radians. (output) + * Longitude : Calculated longitude value in radians. (output) + * Height : Calculated height value, in meters. (output) + */ + + +#ifdef __cplusplus +} +#endif + +#endif /* GEOCENT_H */ diff --git a/proj4/src/geod.c b/proj4/src/geod.c new file mode 100644 index 000000000000..12513cb030f5 --- /dev/null +++ b/proj4/src/geod.c @@ -0,0 +1,237 @@ +/* <<<< Geodesic filter program >>>> */ +# include "projects.h" +# include "geod_interface.h" +# include "emess.h" +# include +# include +# include + +# define MAXLINE 200 +# define MAX_PARGS 50 +# define TAB putchar('\t') + static int +fullout = 0, /* output full set of geodesic values */ +tag = '#', /* beginning of line tag character */ +pos_azi = 0, /* output azimuths as positive values */ +inverse = 0; /* != 0 then inverse geodesic */ + static char +*oform = (char *)0, /* output format for decimal degrees */ +*osform = "%.3f", /* output format for S */ +pline[50], /* work string */ +*usage = +"%s\nusage: %s [ -afFIptTwW [args] ] [ +opts[=arg] ] [ files ]\n"; + static 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(phi2, lam2); putchar('\n'); + for (az = al12; n_alpha--; ) { + al12 = az = adjlon(az + del_alpha); + geod_pre(); + geod_for(); + printLL(phi2, lam2); putchar('\n'); + } +} + static void /* generate intermediate geodesic coordinates */ +do_geod(void) { + double phil, laml, del_S; + + phil = phi2; + laml = lam2; + printLL(phi1, lam1); putchar('\n'); + for ( geod_S = del_S = geod_S / n_S; --n_S; geod_S += del_S) { + geod_for(); + printLL(phi2, lam2); putchar('\n'); + } + printLL(phil, laml); putchar('\n'); +} + static void /* 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; + } + phi1 = dmstor(s, &s); + lam1 = dmstor(s, &s); + if (inverse) { + phi2 = dmstor(s, &s); + lam2 = dmstor(s, &s); + geod_inv(); + } else { + al12 = dmstor(s, &s); + geod_S = strtod(s, &s) * to_meter; + geod_pre(); + geod_for(); + } + if (!*s && (s > line)) --s; /* assumed we gobbled \n */ + if (pos_azi) { + if (al12 < 0.) al12 += M_TWOPI; + if (al21 < 0.) al21 += M_TWOPI; + } + if (fullout) { + printLL(phi1, lam1); TAB; + printLL(phi2, lam2); TAB; + if (oform) { + (void)printf(oform, al12 * RAD_TO_DEG); TAB; + (void)printf(oform, al21 * RAD_TO_DEG); TAB; + (void)printf(osform, geod_S * fr_meter); + } else { + (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB; + (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB; + (void)printf(osform, geod_S * fr_meter); + } + } else if (inverse) + if (oform) { + (void)printf(oform, al12 * RAD_TO_DEG); TAB; + (void)printf(oform, al21 * RAD_TO_DEG); TAB; + (void)printf(osform, geod_S * fr_meter); + } else { + (void)fputs(rtodms(pline, al12, 0, 0), stdout); TAB; + (void)fputs(rtodms(pline, al21, 0, 0), stdout); TAB; + (void)printf(osform, geod_S * fr_meter); + } + else { + printLL(phi2, lam2); TAB; + if (oform) + (void)printf(oform, al21 * RAD_TO_DEG); + else + (void)fputs(rtodms(pline, al21, 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,'/')) != NULL) ++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_set(pargc, pargv); /* setup projection */ + if ((n_alpha || n_S) && eargc) + emess(1,"files specified for arc/geodesic mode"); + if (n_alpha) + do_arc(); + else if (n_S) + do_geod(); + else { /* process input file list */ + if (eargc == 0) /* if no specific files force sysin */ + eargv[eargc++] = "-"; + for ( ; eargc-- ; ++eargv) { + if (**eargv == '-') { + fid = stdin; + emess_dat.File_name = ""; + } else { + if ((fid = fopen(*eargv, "r")) == NULL) { + emess(-2, *eargv, "input file"); + continue; + } + emess_dat.File_name = *eargv; + } + emess_dat.File_line = 0; + process(fid); + (void)fclose(fid); + emess_dat.File_name = (char *)0; + } + } + exit(0); /* normal completion */ +} diff --git a/proj4/src/geod_interface.c b/proj4/src/geod_interface.c new file mode 100644 index 000000000000..a30377ac367f --- /dev/null +++ b/proj4/src/geod_interface.c @@ -0,0 +1,33 @@ +#include "projects.h" +#include "geod_interface.h" + +void geod_ini(void) { + geod_init(&GlobalGeodesic, geod_a, geod_f); +} + +void geod_pre(void) { + double + lat1 = phi1 / DEG_TO_RAD, lon1 = lam1 / DEG_TO_RAD, + azi1 = al12 / DEG_TO_RAD; + geod_lineinit(&GlobalGeodesicLine, &GlobalGeodesic, lat1, lon1, azi1, 0U); +} + +void geod_for(void) { + double + s12 = geod_S, lat2, lon2, azi2; + geod_position(&GlobalGeodesicLine, s12, &lat2, &lon2, &azi2); + azi2 += azi2 >= 0 ? -180 : 180; /* Compute back azimuth */ + phi2 = lat2 * DEG_TO_RAD; + lam2 = lon2 * DEG_TO_RAD; + al21 = azi2 * DEG_TO_RAD; +} + +void geod_inv(void) { + double + lat1 = phi1 / DEG_TO_RAD, lon1 = lam1 / DEG_TO_RAD, + lat2 = phi2 / DEG_TO_RAD, lon2 = lam2 / DEG_TO_RAD, + azi1, azi2, s12; + geod_inverse(&GlobalGeodesic, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2); + azi2 += azi2 >= 0 ? -180 : 180; /* Compute back azimuth */ + al12 = azi1 * DEG_TO_RAD; al21 = azi2 * DEG_TO_RAD; geod_S = s12; +} diff --git a/proj4/src/geod_interface.h b/proj4/src/geod_interface.h new file mode 100644 index 000000000000..255d505ae0da --- /dev/null +++ b/proj4/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 geod_geodesic GlobalGeodesic; +GEOD_EXTERN struct geod_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/proj4/src/geod_set.c b/proj4/src/geod_set.c new file mode 100644 index 000000000000..f61ab437a758 --- /dev/null +++ b/proj4/src/geod_set.c @@ -0,0 +1,66 @@ + +#define _IN_GEOD_SET + +#include +#include "projects.h" +#include "geod_interface.h" +#include "emess.h" + void +geod_set(int argc, char **argv) { + paralist *start = 0, *curr; + double es; + char *name; + int i; + + /* put arguments into internal linked list */ + if (argc <= 0) + emess(1, "no arguments in initialization list"); + start = curr = pj_mkparam(argv[0]); + for (i = 1; i < argc; ++i) { + curr->next = pj_mkparam(argv[i]); + curr = curr->next; + } + /* set elliptical parameters */ + if (pj_ell_set(pj_get_default_ctx(),start, &geod_a, &es)) emess(1,"ellipse setup failure"); + /* set units */ + 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); + fr_meter = 1. / (to_meter = atof(unit_list[i].to_meter)); + } else + to_meter = fr_meter = 1.; + geod_f = es/(1 + sqrt(1 - es)); + geod_ini(); + /* check if line or arc mode */ + if (pj_param(NULL,start, "tlat_1").i) { + double del_S; +#undef f + 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 ((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(NULL,start, "ddel_S").f)) != 0.) { + n_S = (int)(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 */ + for ( ; start; start = curr) { + curr = start->next; + pj_dalloc(start); + } +} diff --git a/proj4/src/geodesic.c b/proj4/src/geodesic.c new file mode 100644 index 000000000000..e897e89e0fbc --- /dev/null +++ b/proj4/src/geodesic.c @@ -0,0 +1,2015 @@ +/** + * \file geodesic.c + * \brief Implementation of the geodesic routines in C + * + * For the full documentation see geodesic.h. + **********************************************************************/ + +/** @cond SKIP */ + +/* + * This is a C implementation of the geodesic algorithms described in + * + * C. F. F. Karney, + * Algorithms for geodesics, + * J. Geodesy 87, 43--55 (2013); + * https://dx.doi.org/10.1007/s00190-012-0578-z + * Addenda: http://geographiclib.sourceforge.net/geod-addenda.html + * + * See the comments in geodesic.h for documentation. + * + * Copyright (c) Charles Karney (2012-2016) and licensed + * under the MIT/X11 License. For more information, see + * http://geographiclib.sourceforge.net/ + */ + +#include "geodesic.h" +#include + +#define GEOGRAPHICLIB_GEODESIC_ORDER 6 +#define nA1 GEOGRAPHICLIB_GEODESIC_ORDER +#define nC1 GEOGRAPHICLIB_GEODESIC_ORDER +#define nC1p GEOGRAPHICLIB_GEODESIC_ORDER +#define nA2 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) +#define nC (GEOGRAPHICLIB_GEODESIC_ORDER + 1) + +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 copysignx(real x, real y) { + return fabs(x) * (y < 0 || (y == 0 && 1/y < 0) ? -1 : 1); +} + +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 sumx(real u, real v, real* t) { + volatile real s = u + v; + volatile real up = s - v; + volatile real vpp = s - up; + up -= u; + vpp -= v; + if (t) *t = -(up + vpp); + /* error-free sum: + * u + v = s + t + * = round(u + v) + t */ + return s; +} + +static real polyval(int N, const real p[], real x) { + real y = N < 0 ? 0 : *p++; + while (--N >= 0) y = y * x + *p++; + return y; +} + +/* mimic C++ std::min and std::max */ +static real minx(real a, real b) +{ return (b < a) ? b : a; } + +static real maxx(real a, real b) +{ return (a < b) ? b : a; } + +static void swapx(real* x, real* y) +{ real t = *x; *x = *y; *y = t; } + +static void norm2(real* sinx, real* cosx) { + real r = hypotx(*sinx, *cosx); + *sinx /= r; + *cosx /= r; +} + +static real AngNormalize(real x) { + x = fmod(x, (real)(360)); + return x < -180 ? x + 360 : (x < 180 ? x : x - 360); +} + +static real LatFix(real x) +{ return fabs(x) > 90 ? NaN : x; } + +static real AngDiff(real x, real y, real* e) { + real t, d = - AngNormalize(sumx(AngNormalize(x), AngNormalize(-y), &t)); + /* Here y - x = d - t (mod 360), exactly, where d is in (-180,180] and + * abs(t) <= eps (eps = 2^-45 for doubles). The only case where the + * addition of t takes the result outside the range (-180,180] is d = 180 + * and t < 0. The case, d = -180 + eps, t = eps, can't happen, since + * sum would have returned the exact result in such a case (i.e., given t + * = 0). */ + return sumx(d == 180 && t < 0 ? -180 : d, -t, e); +} + +static real AngRound(real x) { + const real z = 1/(real)(16); + volatile real y; + if (x == 0) return 0; + 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 sincosdx(real x, real* sinx, real* cosx) { + /* In order to minimize round-off errors, this function exactly reduces + * the argument to the range [-45, 45] before converting it to radians. */ + real r, s, c; int q; + r = fmod(x, (real)(360)); + q = (int)(floor(r / 90 + (real)(0.5))); + r -= 90 * q; + /* now abs(r) <= 45 */ + r *= degree; + /* Possibly could call the gnu extension sincos */ + s = sin(r); c = cos(r); + switch ((unsigned)q & 3U) { + case 0U: *sinx = s; *cosx = c; break; + case 1U: *sinx = c; *cosx = 0 - s; break; + case 2U: *sinx = 0 - s; *cosx = 0 - c; break; + default: *sinx = 0 - c; *cosx = s; break; /* case 3U */ + } +} + +static real atan2dx(real y, real x) { + /* In order to minimize round-off errors, this function rearranges the + * arguments so that result of atan2 is in the range [-pi/4, pi/4] before + * converting it to degrees and mapping the result to the correct + * quadrant. */ + int q = 0; real ang; + if (fabs(y) > fabs(x)) { swapx(&x, &y); q = 2; } + if (x < 0) { x = -x; ++q; } + /* here x >= 0 and x >= abs(y), so angle is in [-pi/4, pi/4] */ + ang = atan2(y, x) / degree; + switch (q) { + /* Note that atan2d(-0.0, 1.0) will return -0. However, we expect that + * atan2d will not be called with y = -0. If need be, include + * + * case 0: ang = 0 + ang; break; + */ + case 1: ang = (y > 0 ? 180 : -180) - ang; break; + case 2: ang = 90 - ang; break; + case 3: ang = -90 + ang; break; + } + return ang; +} + +static void A3coeff(struct geod_geodesic* g); +static void C3coeff(struct geod_geodesic* g); +static void C4coeff(struct geod_geodesic* g); +static real SinCosSeries(boolx sinp, + real sinx, real cosx, + const real c[], int n); +static void Lengths(const struct geod_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, + real* pM12, real* pM21, + /* Scratch area of the right size */ + real Ca[]); +static real Astroid(real x, real y); +static real InverseStart(const struct geod_geodesic* g, + real sbet1, real cbet1, real dn1, + real sbet2, real cbet2, real dn2, + real lam12, real slam12, real clam12, + real* psalp1, real* pcalp1, + /* Only updated if return val >= 0 */ + real* psalp2, real* pcalp2, + /* Only updated for short lines */ + real* pdnm, + /* Scratch area of the right size */ + real Ca[]); +static real Lambda12(const struct geod_geodesic* g, + real sbet1, real cbet1, real dn1, + real sbet2, real cbet2, real dn2, + real salp1, real calp1, + real slam120, real clam120, + real* psalp2, real* pcalp2, + real* psig12, + real* pssig1, real* pcsig1, + real* pssig2, real* pcsig2, + real* peps, + real* psomg12, real* pcomg12, + boolx diffp, real* pdlam12, + /* Scratch area of the right size */ + real Ca[]); +static real A3f(const struct geod_geodesic* g, real eps); +static void C3f(const struct geod_geodesic* g, real eps, real c[]); +static void C4f(const struct geod_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[]); +static int transit(real lon1, real lon2); +static int transitdirect(real lon1, real lon2); +static void accini(real s[]); +static void acccopy(const real s[], real t[]); +static void accadd(real s[], real y); +static real accsum(const real s[], real y); +static void accneg(real s[]); + +void geod_init(struct geod_geodesic* g, real a, real f) { + if (!init) Init(); + g->a = a; + g->f = 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". Using the auxiliary sphere + * solution with dnm computed at (bet1 + bet2) / 2, the relative error in the + * azimuth consistency check is sig12^2 * abs(f) * min(1, 1-f/2) / 2. (Error + * measured for 1/100 < b/a < 100 and abs(f) >= 1/1000. For a given f and + * sig12, the max error occurs for lines near the pole. If the old rule for + * computing dnm = (dn1 + dn2)/2 is used, then the error increases by a + * factor of 2.) Setting this equal to epsilon gives sig12 = etol2. Here + * 0.1 is a safety factor (error decreased by 100) and max(0.001, abs(f)) + * stops etol2 getting too large in the nearly spherical case. */ + g->etol2 = 0.1 * tol2 / + sqrt( maxx((real)(0.001), fabs(g->f)) * minx((real)(1), 1 - g->f/2) / 2 ); + + A3coeff(g); + C3coeff(g); + C4coeff(g); +} + +static void geod_lineinit_int(struct geod_geodesicline* l, + const struct geod_geodesic* g, + real lat1, real lon1, + real azi1, real salp1, real calp1, + unsigned caps) { + real cbet1, sbet1, 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 : GEOD_DISTANCE_IN | GEOD_LONGITUDE) | + /* always allow latitude and azimuth and unrolling of longitude */ + GEOD_LATITUDE | GEOD_AZIMUTH | GEOD_LONG_UNROLL; + + l->lat1 = LatFix(lat1); + l->lon1 = lon1; + l->azi1 = azi1; + l->salp1 = salp1; + l->calp1 = calp1; + + sincosdx(AngRound(l->lat1), &sbet1, &cbet1); sbet1 *= l->f1; + /* Ensure cbet1 = +epsilon at poles */ + norm2(&sbet1, &cbet1); cbet1 = maxx(tiny, 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; + norm2(&l->ssig1, &l->csig1); /* sig1 in (-pi, pi] */ + /* norm2(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); + } + + l->a13 = l->s13 = NaN; +} + +void geod_lineinit(struct geod_geodesicline* l, + const struct geod_geodesic* g, + real lat1, real lon1, real azi1, unsigned caps) { + real salp1, calp1; + azi1 = AngNormalize(azi1); + /* Guard against underflow in salp0 */ + sincosdx(AngRound(azi1), &salp1, &calp1); + geod_lineinit_int(l, g, lat1, lon1, azi1, salp1, calp1, caps); +} + +void geod_gendirectline(struct geod_geodesicline* l, + const struct geod_geodesic* g, + real lat1, real lon1, real azi1, + unsigned flags, real a12_s12, + unsigned caps) { + geod_lineinit(l, g, lat1, lon1, azi1, caps); + geod_gensetdistance(l, flags, a12_s12); +} + +void geod_directline(struct geod_geodesicline* l, + const struct geod_geodesic* g, + real lat1, real lon1, real azi1, + real s12, unsigned caps) { + geod_gendirectline(l, g, lat1, lon1, azi1, GEOD_NOFLAGS, s12, caps); +} + +real geod_genposition(const struct geod_geodesicline* l, + unsigned flags, 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 ? GEOD_LATITUDE : 0U) | + (plon2 ? GEOD_LONGITUDE : 0U) | + (pazi2 ? GEOD_AZIMUTH : 0U) | + (ps12 ? GEOD_DISTANCE : 0U) | + (pm12 ? GEOD_REDUCEDLENGTH : 0U) | + (pM12 || pM21 ? GEOD_GEODESICSCALE : 0U) | + (pS12 ? GEOD_AREA : 0U); + + outmask &= l->caps & OUT_ALL; + if (!( TRUE /*Init()*/ && + (flags & GEOD_ARCMODE || (l->caps & (GEOD_DISTANCE_IN & OUT_ALL))) )) + /* Uninitialized or impossible distance calculation requested */ + return NaN; + + if (flags & GEOD_ARCMODE) { + /* Interpret s12_a12 as spherical arc length */ + sig12 = s12_a12 * degree; + sincosdx(s12_a12, &ssig12, &csig12); + } 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 serr; + ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12; + csig2 = l->csig1 * csig12 - l->ssig1 * ssig12; + 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 & (GEOD_DISTANCE | GEOD_REDUCEDLENGTH | GEOD_GEODESICSCALE)) { + if (flags & GEOD_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(alp0) = cos(sig2)*tan(alp2) */ + salp2 = l->salp0; calp2 = l->calp0 * csig2; /* No need to normalize */ + + if (outmask & GEOD_DISTANCE) + s12 = flags & GEOD_ARCMODE ? l->b * ((1 + l->A1m1) * sig12 + AB1) : s12_a12; + + if (outmask & GEOD_LONGITUDE) { + real E = copysignx(1, l->salp0); /* east or west going? */ + /* tan(omg2) = sin(alp0) * tan(sig2) */ + somg2 = l->salp0 * ssig2; comg2 = csig2; /* No need to normalize */ + /* omg12 = omg2 - omg1 */ + omg12 = flags & GEOD_LONG_UNROLL + ? E * (sig12 + - (atan2( ssig2, csig2) - atan2( l->ssig1, l->csig1)) + + (atan2(E * somg2, comg2) - atan2(E * l->somg1, l->comg1))) + : atan2(somg2 * l->comg1 - comg2 * l->somg1, + comg2 * l->comg1 + somg2 * l->somg1); + lam12 = omg12 + l->A3c * + ( sig12 + (SinCosSeries(TRUE, ssig2, csig2, l->C3a, nC3-1) + - l->B31)); + lon12 = lam12 / degree; + lon2 = flags & GEOD_LONG_UNROLL ? l->lon1 + lon12 : + AngNormalize(AngNormalize(l->lon1) + AngNormalize(lon12)); + } + + if (outmask & GEOD_LATITUDE) + lat2 = atan2dx(sbet2, l->f1 * cbet2); + + if (outmask & GEOD_AZIMUTH) + azi2 = atan2dx(salp2, calp2); + + if (outmask & (GEOD_REDUCEDLENGTH | GEOD_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 & GEOD_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 & GEOD_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 & GEOD_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 normalize */ + salp12 = salp2 * l->calp1 - calp2 * l->salp1; + calp12 = calp2 * l->calp1 + salp2 * l->salp1; + } 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 & GEOD_LATITUDE) + *plat2 = lat2; + if (outmask & GEOD_LONGITUDE) + *plon2 = lon2; + if (outmask & GEOD_AZIMUTH) + *pazi2 = azi2; + if (outmask & GEOD_DISTANCE) + *ps12 = s12; + if (outmask & GEOD_REDUCEDLENGTH) + *pm12 = m12; + if (outmask & GEOD_GEODESICSCALE) { + if (pM12) *pM12 = M12; + if (pM21) *pM21 = M21; + } + if (outmask & GEOD_AREA) + *pS12 = S12; + + return flags & GEOD_ARCMODE ? s12_a12 : sig12 / degree; +} + +void geod_setdistance(struct geod_geodesicline* l, real s13) { + l->s13 = s13; + l->a13 = geod_genposition(l, GEOD_NOFLAGS, l->s13, 0, 0, 0, 0, 0, 0, 0, 0); +} + +static void geod_setarc(struct geod_geodesicline* l, real a13) { + l->a13 = a13; l->s13 = NaN; + geod_genposition(l, GEOD_ARCMODE, l->a13, 0, 0, 0, &l->s13, 0, 0, 0, 0); +} + +void geod_gensetdistance(struct geod_geodesicline* l, + unsigned flags, real s13_a13) { + flags & GEOD_ARCMODE ? geod_setarc(l, s13_a13) : geod_setdistance(l, s13_a13); +} + +void geod_position(const struct geod_geodesicline* l, real s12, + real* plat2, real* plon2, real* pazi2) { + geod_genposition(l, FALSE, s12, plat2, plon2, pazi2, 0, 0, 0, 0, 0); +} + +real geod_gendirect(const struct geod_geodesic* g, + real lat1, real lon1, real azi1, + unsigned flags, real s12_a12, + real* plat2, real* plon2, real* pazi2, + real* ps12, real* pm12, real* pM12, real* pM21, + real* pS12) { + struct geod_geodesicline l; + unsigned outmask = + (plat2 ? GEOD_LATITUDE : 0U) | + (plon2 ? GEOD_LONGITUDE : 0U) | + (pazi2 ? GEOD_AZIMUTH : 0U) | + (ps12 ? GEOD_DISTANCE : 0U) | + (pm12 ? GEOD_REDUCEDLENGTH : 0U) | + (pM12 || pM21 ? GEOD_GEODESICSCALE : 0U) | + (pS12 ? GEOD_AREA : 0U); + + geod_lineinit(&l, g, lat1, lon1, azi1, + /* Automatically supply GEOD_DISTANCE_IN if necessary */ + outmask | + (flags & GEOD_ARCMODE ? GEOD_NONE : GEOD_DISTANCE_IN)); + return geod_genposition(&l, flags, s12_a12, + plat2, plon2, pazi2, ps12, pm12, pM12, pM21, pS12); +} + +void geod_direct(const struct geod_geodesic* g, + real lat1, real lon1, real azi1, + real s12, + real* plat2, real* plon2, real* pazi2) { + geod_gendirect(g, lat1, lon1, azi1, GEOD_NOFLAGS, s12, plat2, plon2, pazi2, + 0, 0, 0, 0, 0); +} + +static real geod_geninverse_int(const struct geod_geodesic* g, + real lat1, real lon1, real lat2, real lon2, + real* ps12, + real* psalp1, real* pcalp1, + real* psalp2, real* pcalp2, + real* pm12, real* pM12, real* pM21, + real* pS12) { + real s12 = 0, m12 = 0, M12 = 0, M21 = 0, S12 = 0; + real lon12, lon12s; + int latsign, lonsign, swapp; + real 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; + real Ca[nC]; + boolx meridian; + /* somg12 > 1 marks that it needs to be calculated */ + real omg12 = 0, somg12 = 2, comg12 = 0; + + unsigned outmask = + (ps12 ? GEOD_DISTANCE : 0U) | + (pm12 ? GEOD_REDUCEDLENGTH : 0U) | + (pM12 || pM21 ? GEOD_GEODESICSCALE : 0U) | + (pS12 ? GEOD_AREA : 0U); + + outmask &= OUT_ALL; + /* Compute longitude difference (AngDiff does this carefully). Result is + * in [-180, 180] but -180 is only for west-going geodesics. 180 is for + * east-going and meridional geodesics. */ + lon12 = AngDiff(lon1, lon2, &lon12s); + /* Make longitude difference positive. */ + lonsign = lon12 >= 0 ? 1 : -1; + /* If very close to being on the same half-meridian, then make it so. */ + lon12 = lonsign * AngRound(lon12); + lon12s = AngRound((180 - lon12) - lonsign * lon12s); + lam12 = lon12 * degree; + if (lon12 > 90) { + sincosdx(lon12s, &slam12, &clam12); + clam12 = -clam12; + } else + sincosdx(lon12, &slam12, &clam12); + + /* If really close to the equator, treat as on equator. */ + lat1 = AngRound(LatFix(lat1)); + lat2 = AngRound(LatFix(lat2)); + /* Swap points so that point with higher (abs) latitude is point 1 + * If one latitude is a nan, then it becomes lat1. */ + 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. */ + + sincosdx(lat1, &sbet1, &cbet1); sbet1 *= g->f1; + /* Ensure cbet1 = +epsilon at poles */ + norm2(&sbet1, &cbet1); cbet1 = maxx(tiny, cbet1); + + sincosdx(lat2, &sbet2, &cbet2); sbet2 *= g->f1; + /* Ensure cbet2 = +epsilon at poles */ + norm2(&sbet2, &cbet2); cbet2 = maxx(tiny, 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)); + + 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((real)(0), csig1 * ssig2 - ssig1 * csig2), + csig1 * csig2 + ssig1 * ssig2); + Lengths(g, g->n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, + cbet1, cbet2, &s12x, &m12x, 0, + outmask & GEOD_GEODESICSCALE ? &M12 : 0, + outmask & GEOD_GEODESICSCALE ? &M21 : 0, + Ca); + /* Add the check for sig12 since zero length geodesics might yield m12 < + * 0. Test case was + * + * echo 20.001 0 20.001 0 | GeodSolve -i + * + * In fact, we will have sig12 > pi/2 for meridional geodesic which is + * not a shortest path. */ + if (sig12 < 1 || m12x >= 0) { + /* Need at least 2, to handle 90 0 90 180 */ + if (sig12 < 3 * tiny) + sig12 = m12x = s12x = 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 || lon12s >= g->f * 180)) { + + /* 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 & GEOD_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 */ + real dnm = 0; + sig12 = InverseStart(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, + lam12, slam12, clam12, + &salp1, &calp1, &salp2, &calp2, &dnm, + Ca); + + if (sig12 >= 0) { + /* Short lines (InverseStart sets salp2, calp2, dnm) */ + s12x = sig12 * g->b * dnm; + m12x = sq(dnm) * g->b * sin(sig12 / dnm); + if (outmask & GEOD_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 = 0, + v = Lambda12(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1, + slam12, clam12, + &salp2, &calp2, &sig12, &ssig1, &csig1, &ssig2, &csig2, + &eps, &somg12, &comg12, numit < maxit1, &dv, Ca); + /* 2 * tol0 is approximately 1 ulp for a number in [0, pi]. */ + /* Reversed test to allow escape with NaNs */ + if (tripb || !(fabs(v) >= (tripn ? 8 : 1) * tol0)) break; + /* Update bracketing values */ + if (v > 0 && (numit > maxit1 || calp1/salp1 > calp1b/salp1b)) + { salp1b = salp1; calp1b = calp1; } + else if (v < 0 && (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; + norm2(&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; + norm2(&salp1, &calp1); + tripn = FALSE; + tripb = (fabs(salp1a - salp1) + (calp1a - calp1) < tolb || + fabs(salp1 - salp1b) + (calp1 - calp1b) < tolb); + } + Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, + cbet1, cbet2, &s12x, &m12x, 0, + outmask & GEOD_GEODESICSCALE ? &M12 : 0, + outmask & GEOD_GEODESICSCALE ? &M21 : 0, Ca); + m12x *= g->b; + s12x *= g->b; + a12 = sig12 / degree; + } + } + + if (outmask & GEOD_DISTANCE) + s12 = 0 + s12x; /* Convert -0 to 0 */ + + if (outmask & GEOD_REDUCEDLENGTH) + m12 = 0 + m12x; /* Convert -0 to 0 */ + + if (outmask & GEOD_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 B41, B42; + norm2(&ssig1, &csig1); + norm2(&ssig2, &csig2); + C4f(g, eps, Ca); + B41 = SinCosSeries(FALSE, ssig1, csig1, Ca, nC4); + B42 = SinCosSeries(FALSE, ssig2, csig2, Ca, nC4); + S12 = A4 * (B42 - B41); + } else + /* Avoid problems with indeterminate sig1, sig2 on equator */ + S12 = 0; + + if (!meridian) { + if (somg12 > 1) { + somg12 = sin(omg12); comg12 = cos(omg12); + } else + norm2(&somg12, &comg12); + } + + if (!meridian && + /* omg12 < 3/4 * pi */ + comg12 > -(real)(0.7071) && /* Long difference not too big */ + sbet2 - sbet1 < (real)(1.75)) { /* Lat difference not 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 + domg12 = 1 + comg12, 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 & GEOD_GEODESICSCALE) + swapx(&M12, &M21); + } + + salp1 *= swapp * lonsign; calp1 *= swapp * latsign; + salp2 *= swapp * lonsign; calp2 *= swapp * latsign; + + if (psalp1) *psalp1 = salp1; + if (pcalp1) *pcalp1 = calp1; + if (psalp2) *psalp2 = salp2; + if (pcalp2) *pcalp2 = calp2; + + if (outmask & GEOD_DISTANCE) + *ps12 = s12; + if (outmask & GEOD_REDUCEDLENGTH) + *pm12 = m12; + if (outmask & GEOD_GEODESICSCALE) { + if (pM12) *pM12 = M12; + if (pM21) *pM21 = M21; + } + if (outmask & GEOD_AREA) + *pS12 = S12; + + /* Returned value in [0, 180] */ + return a12; +} + +real geod_geninverse(const struct geod_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 salp1, calp1, salp2, calp2, + a12 = geod_geninverse_int(g, lat1, lon1, lat2, lon2, ps12, + &salp1, &calp1, &salp2, &calp2, + pm12, pM12, pM21, pS12); + if (pazi1) *pazi1 = atan2dx(salp1, calp1); + if (pazi2) *pazi2 = atan2dx(salp2, calp2); + return a12; +} + +void geod_inverseline(struct geod_geodesicline* l, + const struct geod_geodesic* g, + real lat1, real lon1, real lat2, real lon2, + unsigned caps) { + real salp1, calp1, + a12 = geod_geninverse_int(g, lat1, lon1, lat2, lon2, 0, + &salp1, &calp1, 0, 0, + 0, 0, 0, 0), + azi1 = atan2dx(salp1, calp1); + caps = caps ? caps : GEOD_DISTANCE_IN | GEOD_LONGITUDE; + /* Ensure that a12 can be converted to a distance */ + if (caps & (OUT_ALL & GEOD_DISTANCE_IN)) caps |= GEOD_DISTANCE; + geod_lineinit_int(l, g, lat1, lon1, azi1, salp1, calp1, caps); + geod_setarc(l, a12); +} + +void geod_inverse(const struct geod_geodesic* g, + real lat1, real lon1, real lat2, real lon2, + real* ps12, real* pazi1, real* pazi2) { + geod_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 geod_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, + real* pM12, real* pM21, + /* Scratch area of the right size */ + real Ca[]) { + real m0 = 0, J12 = 0, A1 = 0, A2 = 0; + real Cb[nC]; + + /* Return m12b = (reduced length)/b; also calculate s12b = distance/b, + * and m0 = coefficient of secular term in expression for reduced length. */ + boolx redlp = pm12b || pm0 || pM12 || pM21; + if (ps12b || redlp) { + A1 = A1m1f(eps); + C1f(eps, Ca); + if (redlp) { + A2 = A2m1f(eps); + C2f(eps, Cb); + m0 = A1 - A2; + A2 = 1 + A2; + } + A1 = 1 + A1; + } + if (ps12b) { + real B1 = SinCosSeries(TRUE, ssig2, csig2, Ca, nC1) - + SinCosSeries(TRUE, ssig1, csig1, Ca, nC1); + /* Missing a factor of b */ + *ps12b = A1 * (sig12 + B1); + if (redlp) { + real B2 = SinCosSeries(TRUE, ssig2, csig2, Cb, nC2) - + SinCosSeries(TRUE, ssig1, csig1, Cb, nC2); + J12 = m0 * sig12 + (A1 * B1 - A2 * B2); + } + } else if (redlp) { + /* Assume here that nC1 >= nC2 */ + int l; + for (l = 1; l <= nC2; ++l) + Cb[l] = A1 * Ca[l] - A2 * Cb[l]; + J12 = m0 * sig12 + (SinCosSeries(TRUE, ssig2, csig2, Cb, nC2) - + SinCosSeries(TRUE, ssig1, csig1, Cb, nC2)); + } + if (pm0) *pm0 = m0; + if (pm12b) + /* Missing a factor of b. + * Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure + * accurate cancellation in the case of coincident points. */ + *pm12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - + csig1 * csig2 * J12; + if (pM12 || pM21) { + real csig12 = csig1 * csig2 + ssig1 * ssig2; + real t = g->ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2); + if (pM12) + *pM12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1; + if (pM21) + *pM21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2; + } +} + +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 discriminant 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 geod_geodesic* g, + real sbet1, real cbet1, real dn1, + real sbet2, real cbet2, real dn2, + real lam12, real slam12, real clam12, + real* psalp1, real* pcalp1, + /* Only updated if return val >= 0 */ + real* psalp2, real* pcalp2, + /* Only updated for short lines */ + real* pdnm, + /* Scratch area of the right size */ + real Ca[]) { + real salp1 = 0, calp1 = 0, salp2 = 0, calp2 = 0, dnm = 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; + real sbet12a; + boolx shortline = cbet12 >= 0 && sbet12 < (real)(0.5) && + cbet2 * lam12 < (real)(0.5); + real somg12, comg12, ssig12, csig12; +#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). */ + { + volatile real xx1 = sbet2 * cbet1; + volatile real xx2 = cbet2 * sbet1; + sbet12a = xx1 + xx2; + } +#else + sbet12a = sbet2 * cbet1 + cbet2 * sbet1; +#endif + if (shortline) { + real sbetm2 = sq(sbet1 + sbet2), omg12; + /* sin((bet1+bet2)/2)^2 + * = (sbet1 + sbet2)^2 / ((sbet1 + sbet2)^2 + (cbet1 + cbet2)^2) */ + sbetm2 /= sbetm2 + sq(cbet1 + cbet2); + dnm = sqrt(1 + g->ep2 * sbetm2); + omg12 = lam12 / (g->f1 * dnm); + somg12 = sin(omg12); comg12 = cos(omg12); + } else { + somg12 = slam12; comg12 = clam12; + } + + 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 * + (comg12 >= 0 ? sq(somg12) / (1 + comg12) : 1 - comg12); + norm2(&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; + real lam12x = atan2(-slam12, -clam12); /* lam12 - pi */ + 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 = lam12x / lamscale; + y = sbet12a / betscale; + } else { /* f < 0 */ + /* x = dlat, y = dlong */ + real + cbet12a = cbet2 * cbet1 - sbet2 * sbet1, + bet12a = atan2(sbet12a, cbet12a); + real m12b, m0; + /* 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, 0, &m12b, &m0, 0, 0, Ca); + x = -1 + m12b / (cbet1 * cbet2 * m0 * pi); + betscale = x < -(real)(0.01) ? sbet12a / x : + -g->f * sq(cbet1) * pi; + lamscale = betscale / cbet1; + y = lam12x / 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); + } + } + /* Sanity check on starting guess. Backwards check allows NaN through. */ + if (!(salp1 <= 0)) + norm2(&salp1, &calp1); + else { + salp1 = 1; calp1 = 0; + } + + *psalp1 = salp1; + *pcalp1 = calp1; + if (shortline) + *pdnm = dnm; + if (sig12 >= 0) { + *psalp2 = salp2; + *pcalp2 = calp2; + } + return sig12; +} + +real Lambda12(const struct geod_geodesic* g, + real sbet1, real cbet1, real dn1, + real sbet2, real cbet2, real dn2, + real salp1, real calp1, + real slam120, real clam120, + real* psalp2, real* pcalp2, + real* psig12, + real* pssig1, real* pcsig1, + real* pssig2, real* pcsig2, + real* peps, + real* psomg12, real* pcomg12, + boolx diffp, real* pdlam12, + /* Scratch area of the right size */ + real Ca[]) { + real salp2 = 0, calp2 = 0, sig12 = 0, + ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0, + somg12 = 0, comg12 = 0, dlam12 = 0; + real salp0, calp0; + real somg1, comg1, somg2, comg2, lam12; + real B312, eta, 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; + norm2(&ssig1, &csig1); + /* norm2(&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; + norm2(&ssig2, &csig2); + /* norm2(&somg2, &comg2); -- don't need to normalize! */ + + /* sig12 = sig2 - sig1, limit to [0, pi] */ + sig12 = atan2(maxx((real)(0), csig1 * ssig2 - ssig1 * csig2), + csig1 * csig2 + ssig1 * ssig2); + + /* omg12 = omg2 - omg1, limit to [0, pi] */ + somg12 = maxx((real)(0), comg1 * somg2 - somg1 * comg2); + comg12 = comg1 * comg2 + somg1 * somg2; + /* eta = omg12 - lam120 */ + eta = atan2(somg12 * clam120 - comg12 * slam120, + comg12 * clam120 + somg12 * slam120); + k2 = sq(calp0) * g->ep2; + eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2); + C3f(g, eps, Ca); + B312 = (SinCosSeries(TRUE, ssig2, csig2, Ca, nC3-1) - + SinCosSeries(TRUE, ssig1, csig1, Ca, nC3-1)); + lam12 = eta - g->f * A3f(g, eps) * salp0 * (sig12 + B312); + + if (diffp) { + if (calp2 == 0) + dlam12 = - 2 * g->f1 * dn1 / sbet1; + else { + Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2, + cbet1, cbet2, 0, &dlam12, 0, 0, 0, Ca); + dlam12 *= g->f1 / (calp2 * cbet2); + } + } + + *psalp2 = salp2; + *pcalp2 = calp2; + *psig12 = sig12; + *pssig1 = ssig1; + *pcsig1 = csig1; + *pssig2 = ssig2; + *pcsig2 = csig2; + *peps = eps; + *psomg12 = somg12; + *pcomg12 = comg12; + if (diffp) + *pdlam12 = dlam12; + + return lam12; +} + +real A3f(const struct geod_geodesic* g, real eps) { + /* Evaluate A3 */ + return polyval(nA3 - 1, g->A3x, eps); +} + +void C3f(const struct geod_geodesic* g, real eps, real c[]) { + /* Evaluate C3 coeffs + * Elements c[1] thru c[nC3 - 1] are set */ + real mult = 1; + int o = 0, l; + for (l = 1; l < nC3; ++l) { /* l is index of C3[l] */ + int m = nC3 - l - 1; /* order of polynomial in eps */ + mult *= eps; + c[l] = mult * polyval(m, g->C3x + o, eps); + o += m + 1; + } +} + +void C4f(const struct geod_geodesic* g, real eps, real c[]) { + /* Evaluate C4 coeffs + * Elements c[0] thru c[nC4 - 1] are set */ + real mult = 1; + int o = 0, l; + for (l = 0; l < nC4; ++l) { /* l is index of C4[l] */ + int m = nC4 - l - 1; /* order of polynomial in eps */ + c[l] = mult * polyval(m, g->C4x + o, eps); + o += m + 1; + mult *= eps; + } +} + +/* The scale factor A1-1 = mean value of (d/dsigma)I1 - 1 */ +real A1m1f(real eps) { + static const real coeff[] = { + /* (1-eps)*A1-1, polynomial in eps2 of order 3 */ + 1, 4, 64, 0, 256, + }; + int m = nA1/2; + real t = polyval(m, coeff, sq(eps)) / coeff[m + 1]; + return (t + eps) / (1 - eps); +} + +/* The coefficients C1[l] in the Fourier expansion of B1 */ +void C1f(real eps, real c[]) { + static const real coeff[] = { + /* C1[1]/eps^1, polynomial in eps2 of order 2 */ + -1, 6, -16, 32, + /* C1[2]/eps^2, polynomial in eps2 of order 2 */ + -9, 64, -128, 2048, + /* C1[3]/eps^3, polynomial in eps2 of order 1 */ + 9, -16, 768, + /* C1[4]/eps^4, polynomial in eps2 of order 1 */ + 3, -5, 512, + /* C1[5]/eps^5, polynomial in eps2 of order 0 */ + -7, 1280, + /* C1[6]/eps^6, polynomial in eps2 of order 0 */ + -7, 2048, + }; + real + eps2 = sq(eps), + d = eps; + int o = 0, l; + for (l = 1; l <= nC1; ++l) { /* l is index of C1p[l] */ + int m = (nC1 - l) / 2; /* order of polynomial in eps^2 */ + c[l] = d * polyval(m, coeff + o, eps2) / coeff[o + m + 1]; + o += m + 2; + d *= eps; + } +} + +/* The coefficients C1p[l] in the Fourier expansion of B1p */ +void C1pf(real eps, real c[]) { + static const real coeff[] = { + /* C1p[1]/eps^1, polynomial in eps2 of order 2 */ + 205, -432, 768, 1536, + /* C1p[2]/eps^2, polynomial in eps2 of order 2 */ + 4005, -4736, 3840, 12288, + /* C1p[3]/eps^3, polynomial in eps2 of order 1 */ + -225, 116, 384, + /* C1p[4]/eps^4, polynomial in eps2 of order 1 */ + -7173, 2695, 7680, + /* C1p[5]/eps^5, polynomial in eps2 of order 0 */ + 3467, 7680, + /* C1p[6]/eps^6, polynomial in eps2 of order 0 */ + 38081, 61440, + }; + real + eps2 = sq(eps), + d = eps; + int o = 0, l; + for (l = 1; l <= nC1p; ++l) { /* l is index of C1p[l] */ + int m = (nC1p - l) / 2; /* order of polynomial in eps^2 */ + c[l] = d * polyval(m, coeff + o, eps2) / coeff[o + m + 1]; + o += m + 2; + d *= eps; + } +} + +/* The scale factor A2-1 = mean value of (d/dsigma)I2 - 1 */ +real A2m1f(real eps) { + static const real coeff[] = { + /* (eps+1)*A2-1, polynomial in eps2 of order 3 */ + -11, -28, -192, 0, 256, + }; + int m = nA2/2; + real t = polyval(m, coeff, sq(eps)) / coeff[m + 1]; + return (t - eps) / (1 + eps); +} + +/* The coefficients C2[l] in the Fourier expansion of B2 */ +void C2f(real eps, real c[]) { + static const real coeff[] = { + /* C2[1]/eps^1, polynomial in eps2 of order 2 */ + 1, 2, 16, 32, + /* C2[2]/eps^2, polynomial in eps2 of order 2 */ + 35, 64, 384, 2048, + /* C2[3]/eps^3, polynomial in eps2 of order 1 */ + 15, 80, 768, + /* C2[4]/eps^4, polynomial in eps2 of order 1 */ + 7, 35, 512, + /* C2[5]/eps^5, polynomial in eps2 of order 0 */ + 63, 1280, + /* C2[6]/eps^6, polynomial in eps2 of order 0 */ + 77, 2048, + }; + real + eps2 = sq(eps), + d = eps; + int o = 0, l; + for (l = 1; l <= nC2; ++l) { /* l is index of C2[l] */ + int m = (nC2 - l) / 2; /* order of polynomial in eps^2 */ + c[l] = d * polyval(m, coeff + o, eps2) / coeff[o + m + 1]; + o += m + 2; + d *= eps; + } +} + +/* The scale factor A3 = mean value of (d/dsigma)I3 */ +void A3coeff(struct geod_geodesic* g) { + static const real coeff[] = { + /* A3, coeff of eps^5, polynomial in n of order 0 */ + -3, 128, + /* A3, coeff of eps^4, polynomial in n of order 1 */ + -2, -3, 64, + /* A3, coeff of eps^3, polynomial in n of order 2 */ + -1, -3, -1, 16, + /* A3, coeff of eps^2, polynomial in n of order 2 */ + 3, -1, -2, 8, + /* A3, coeff of eps^1, polynomial in n of order 1 */ + 1, -1, 2, + /* A3, coeff of eps^0, polynomial in n of order 0 */ + 1, 1, + }; + int o = 0, k = 0, j; + for (j = nA3 - 1; j >= 0; --j) { /* coeff of eps^j */ + int m = nA3 - j - 1 < j ? nA3 - j - 1 : j; /* order of polynomial in n */ + g->A3x[k++] = polyval(m, coeff + o, g->n) / coeff[o + m + 1]; + o += m + 2; + } +} + +/* The coefficients C3[l] in the Fourier expansion of B3 */ +void C3coeff(struct geod_geodesic* g) { + static const real coeff[] = { + /* C3[1], coeff of eps^5, polynomial in n of order 0 */ + 3, 128, + /* C3[1], coeff of eps^4, polynomial in n of order 1 */ + 2, 5, 128, + /* C3[1], coeff of eps^3, polynomial in n of order 2 */ + -1, 3, 3, 64, + /* C3[1], coeff of eps^2, polynomial in n of order 2 */ + -1, 0, 1, 8, + /* C3[1], coeff of eps^1, polynomial in n of order 1 */ + -1, 1, 4, + /* C3[2], coeff of eps^5, polynomial in n of order 0 */ + 5, 256, + /* C3[2], coeff of eps^4, polynomial in n of order 1 */ + 1, 3, 128, + /* C3[2], coeff of eps^3, polynomial in n of order 2 */ + -3, -2, 3, 64, + /* C3[2], coeff of eps^2, polynomial in n of order 2 */ + 1, -3, 2, 32, + /* C3[3], coeff of eps^5, polynomial in n of order 0 */ + 7, 512, + /* C3[3], coeff of eps^4, polynomial in n of order 1 */ + -10, 9, 384, + /* C3[3], coeff of eps^3, polynomial in n of order 2 */ + 5, -9, 5, 192, + /* C3[4], coeff of eps^5, polynomial in n of order 0 */ + 7, 512, + /* C3[4], coeff of eps^4, polynomial in n of order 1 */ + -14, 7, 512, + /* C3[5], coeff of eps^5, polynomial in n of order 0 */ + 21, 2560, + }; + int o = 0, k = 0, l, j; + for (l = 1; l < nC3; ++l) { /* l is index of C3[l] */ + for (j = nC3 - 1; j >= l; --j) { /* coeff of eps^j */ + int m = nC3 - j - 1 < j ? nC3 - j - 1 : j; /* order of polynomial in n */ + g->C3x[k++] = polyval(m, coeff + o, g->n) / coeff[o + m + 1]; + o += m + 2; + } + } +} + +/* The coefficients C4[l] in the Fourier expansion of I4 */ +void C4coeff(struct geod_geodesic* g) { + static const real coeff[] = { + /* C4[0], coeff of eps^5, polynomial in n of order 0 */ + 97, 15015, + /* C4[0], coeff of eps^4, polynomial in n of order 1 */ + 1088, 156, 45045, + /* C4[0], coeff of eps^3, polynomial in n of order 2 */ + -224, -4784, 1573, 45045, + /* C4[0], coeff of eps^2, polynomial in n of order 3 */ + -10656, 14144, -4576, -858, 45045, + /* C4[0], coeff of eps^1, polynomial in n of order 4 */ + 64, 624, -4576, 6864, -3003, 15015, + /* C4[0], coeff of eps^0, polynomial in n of order 5 */ + 100, 208, 572, 3432, -12012, 30030, 45045, + /* C4[1], coeff of eps^5, polynomial in n of order 0 */ + 1, 9009, + /* C4[1], coeff of eps^4, polynomial in n of order 1 */ + -2944, 468, 135135, + /* C4[1], coeff of eps^3, polynomial in n of order 2 */ + 5792, 1040, -1287, 135135, + /* C4[1], coeff of eps^2, polynomial in n of order 3 */ + 5952, -11648, 9152, -2574, 135135, + /* C4[1], coeff of eps^1, polynomial in n of order 4 */ + -64, -624, 4576, -6864, 3003, 135135, + /* C4[2], coeff of eps^5, polynomial in n of order 0 */ + 8, 10725, + /* C4[2], coeff of eps^4, polynomial in n of order 1 */ + 1856, -936, 225225, + /* C4[2], coeff of eps^3, polynomial in n of order 2 */ + -8448, 4992, -1144, 225225, + /* C4[2], coeff of eps^2, polynomial in n of order 3 */ + -1440, 4160, -4576, 1716, 225225, + /* C4[3], coeff of eps^5, polynomial in n of order 0 */ + -136, 63063, + /* C4[3], coeff of eps^4, polynomial in n of order 1 */ + 1024, -208, 105105, + /* C4[3], coeff of eps^3, polynomial in n of order 2 */ + 3584, -3328, 1144, 315315, + /* C4[4], coeff of eps^5, polynomial in n of order 0 */ + -128, 135135, + /* C4[4], coeff of eps^4, polynomial in n of order 1 */ + -2560, 832, 405405, + /* C4[5], coeff of eps^5, polynomial in n of order 0 */ + 128, 99099, + }; + int o = 0, k = 0, l, j; + for (l = 0; l < nC4; ++l) { /* l is index of C4[l] */ + for (j = nC4 - 1; j >= l; --j) { /* coeff of eps^j */ + int m = nC4 - j - 1; /* order of polynomial in n */ + g->C4x[k++] = polyval(m, coeff + o, g->n) / coeff[o + m + 1]; + o += m + 2; + } + } +} + +int transit(real lon1, real lon2) { + real lon12; + /* Return 1 or -1 if crossing prime meridian in east or west direction. + * Otherwise return zero. */ + /* Compute lon12 the same way as Geodesic::Inverse. */ + lon1 = AngNormalize(lon1); + lon2 = AngNormalize(lon2); + lon12 = AngDiff(lon1, lon2, 0); + return lon1 < 0 && lon2 >= 0 && lon12 > 0 ? 1 : + (lon2 < 0 && lon1 >= 0 && lon12 < 0 ? -1 : 0); +} + +int transitdirect(real lon1, real lon2) { + lon1 = fmod(lon1, (real)(720)); + lon2 = fmod(lon2, (real)(720)); + return ( ((lon2 >= 0 && lon2 < 360) || lon2 < -360 ? 0 : 1) - + ((lon1 >= 0 && lon1 < 360) || lon1 < -360 ? 0 : 1) ); +} + +void accini(real s[]) { + /* Initialize an accumulator; this is an array with two elements. */ + s[0] = s[1] = 0; +} + +void acccopy(const real s[], real t[]) { + /* Copy an accumulator; t = s. */ + t[0] = s[0]; t[1] = s[1]; +} + +void accadd(real s[], real y) { + /* Add y to an accumulator. */ + real u, z = sumx(y, s[1], &u); + s[0] = sumx(z, s[0], &s[1]); + if (s[0] == 0) + s[0] = u; + else + s[1] = s[1] + u; +} + +real accsum(const real s[], real y) { + /* Return accumulator + y (but don't add to accumulator). */ + real t[2]; + acccopy(s, t); + accadd(t, y); + return t[0]; +} + +void accneg(real s[]) { + /* Negate an accumulator. */ + s[0] = -s[0]; s[1] = -s[1]; +} + +void geod_polygon_init(struct geod_polygon* p, boolx polylinep) { + p->polyline = (polylinep != 0); + geod_polygon_clear(p); +} + +void geod_polygon_clear(struct geod_polygon* p) { + p->lat0 = p->lon0 = p->lat = p->lon = NaN; + accini(p->P); + accini(p->A); + p->num = p->crossings = 0; +} + +void geod_polygon_addpoint(const struct geod_geodesic* g, + struct geod_polygon* p, + real lat, real lon) { + lon = AngNormalize(lon); + if (p->num == 0) { + p->lat0 = p->lat = lat; + p->lon0 = p->lon = lon; + } else { + real s12, S12; + geod_geninverse(g, p->lat, p->lon, lat, lon, + &s12, 0, 0, 0, 0, 0, p->polyline ? 0 : &S12); + accadd(p->P, s12); + if (!p->polyline) { + accadd(p->A, S12); + p->crossings += transit(p->lon, lon); + } + p->lat = lat; p->lon = lon; + } + ++p->num; +} + +void geod_polygon_addedge(const struct geod_geodesic* g, + struct geod_polygon* p, + real azi, real s) { + if (p->num) { /* Do nothing is num is zero */ + real lat, lon, S12; + geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s, + &lat, &lon, 0, + 0, 0, 0, 0, p->polyline ? 0 : &S12); + accadd(p->P, s); + if (!p->polyline) { + accadd(p->A, S12); + p->crossings += transitdirect(p->lon, lon); + } + p->lat = lat; p->lon = lon; + ++p->num; + } +} + +unsigned geod_polygon_compute(const struct geod_geodesic* g, + const struct geod_polygon* p, + boolx reverse, boolx sign, + real* pA, real* pP) { + real s12, S12, t[2], area0; + int crossings; + if (p->num < 2) { + if (pP) *pP = 0; + if (!p->polyline && pA) *pA = 0; + return p->num; + } + if (p->polyline) { + if (pP) *pP = p->P[0]; + return p->num; + } + geod_geninverse(g, p->lat, p->lon, p->lat0, p->lon0, + &s12, 0, 0, 0, 0, 0, &S12); + if (pP) *pP = accsum(p->P, s12); + acccopy(p->A, t); + accadd(t, S12); + crossings = p->crossings + transit(p->lon, p->lon0); + area0 = 4 * pi * g->c2; + if (crossings & 1) + accadd(t, (t[0] < 0 ? 1 : -1) * area0/2); + /* area is with the clockwise sense. If !reverse convert to + * counter-clockwise convention. */ + if (!reverse) + accneg(t); + /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */ + if (sign) { + if (t[0] > area0/2) + accadd(t, -area0); + else if (t[0] <= -area0/2) + accadd(t, +area0); + } else { + if (t[0] >= area0) + accadd(t, -area0); + else if (t[0] < 0) + accadd(t, +area0); + } + if (pA) *pA = 0 + t[0]; + return p->num; +} + +unsigned geod_polygon_testpoint(const struct geod_geodesic* g, + const struct geod_polygon* p, + real lat, real lon, + boolx reverse, boolx sign, + real* pA, real* pP) { + real perimeter, tempsum, area0; + int crossings, i; + unsigned num = p->num + 1; + if (num == 1) { + if (pP) *pP = 0; + if (!p->polyline && pA) *pA = 0; + return num; + } + perimeter = p->P[0]; + tempsum = p->polyline ? 0 : p->A[0]; + crossings = p->crossings; + for (i = 0; i < (p->polyline ? 1 : 2); ++i) { + real s12, S12; + geod_geninverse(g, + i == 0 ? p->lat : lat, i == 0 ? p->lon : lon, + i != 0 ? p->lat0 : lat, i != 0 ? p->lon0 : lon, + &s12, 0, 0, 0, 0, 0, p->polyline ? 0 : &S12); + perimeter += s12; + if (!p->polyline) { + tempsum += S12; + crossings += transit(i == 0 ? p->lon : lon, + i != 0 ? p->lon0 : lon); + } + } + + if (pP) *pP = perimeter; + if (p->polyline) + return num; + + area0 = 4 * pi * g->c2; + if (crossings & 1) + tempsum += (tempsum < 0 ? 1 : -1) * area0/2; + /* area is with the clockwise sense. If !reverse convert to + * counter-clockwise convention. */ + if (!reverse) + tempsum *= -1; + /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */ + if (sign) { + if (tempsum > area0/2) + tempsum -= area0; + else if (tempsum <= -area0/2) + tempsum += area0; + } else { + if (tempsum >= area0) + tempsum -= area0; + else if (tempsum < 0) + tempsum += area0; + } + if (pA) *pA = 0 + tempsum; + return num; +} + +unsigned geod_polygon_testedge(const struct geod_geodesic* g, + const struct geod_polygon* p, + real azi, real s, + boolx reverse, boolx sign, + real* pA, real* pP) { + real perimeter, tempsum, area0; + int crossings; + unsigned num = p->num + 1; + if (num == 1) { /* we don't have a starting point! */ + if (pP) *pP = NaN; + if (!p->polyline && pA) *pA = NaN; + return 0; + } + perimeter = p->P[0] + s; + if (p->polyline) { + if (pP) *pP = perimeter; + return num; + } + + tempsum = p->A[0]; + crossings = p->crossings; + { + real lat, lon, s12, S12; + geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s, + &lat, &lon, 0, + 0, 0, 0, 0, &S12); + tempsum += S12; + crossings += transitdirect(p->lon, lon); + geod_geninverse(g, lat, lon, p->lat0, p->lon0, + &s12, 0, 0, 0, 0, 0, &S12); + perimeter += s12; + tempsum += S12; + crossings += transit(lon, p->lon0); + } + + area0 = 4 * pi * g->c2; + if (crossings & 1) + tempsum += (tempsum < 0 ? 1 : -1) * area0/2; + /* area is with the clockwise sense. If !reverse convert to + * counter-clockwise convention. */ + if (!reverse) + tempsum *= -1; + /* If sign put area in (-area0/2, area0/2], else put area in [0, area0) */ + if (sign) { + if (tempsum > area0/2) + tempsum -= area0; + else if (tempsum <= -area0/2) + tempsum += area0; + } else { + if (tempsum >= area0) + tempsum -= area0; + else if (tempsum < 0) + tempsum += area0; + } + if (pP) *pP = perimeter; + if (pA) *pA = 0 + tempsum; + return num; +} + +void geod_polygonarea(const struct geod_geodesic* g, + real lats[], real lons[], int n, + real* pA, real* pP) { + int i; + struct geod_polygon p; + geod_polygon_init(&p, FALSE); + for (i = 0; i < n; ++i) + geod_polygon_addpoint(g, &p, lats[i], lons[i]); + geod_polygon_compute(g, &p, FALSE, TRUE, pA, pP); +} + +/** @endcond */ diff --git a/proj4/src/geodesic.h b/proj4/src/geodesic.h new file mode 100644 index 000000000000..c3f28c79eb93 --- /dev/null +++ b/proj4/src/geodesic.h @@ -0,0 +1,910 @@ +/** + * \file geodesic.h + * \brief API for the geodesic routines in C + * + * This an implementation in C of the geodesic algorithms described in + * - C. F. F. Karney, + * + * Algorithms for geodesics, + * J. Geodesy 87, 43--55 (2013); + * DOI: + * 10.1007/s00190-012-0578-z; + * addenda: + * geod-addenda.html. + * . + * The principal advantages of these algorithms over previous ones (e.g., + * Vincenty, 1975) are + * - accurate to round off for |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 (\e lat1, \e + * lon1) and (\e lat2, \e lon2) is called the geodesic. Its length is + * \e s12 and the geodesic from point 1 to point 2 has forward azimuths + * \e azi1 and \e azi2 at the two end points. + * + * Traditionally two geodesic problems are considered: + * - the direct problem -- given \e lat1, \e lon1, \e s12, and \e azi1, + * determine \e lat2, \e lon2, and \e azi2. This is solved by the function + * geod_direct(). + * - the inverse problem -- given \e lat1, \e lon1, and \e lat2, \e lon2, + * determine \e s12, \e azi1, and \e azi2. This is solved by the function + * geod_inverse(). + * + * The ellipsoid is specified by its equatorial radius \e a (typically in + * meters) and flattening \e f. The routines are accurate to round off with + * double precision arithmetic provided that |f| < 1/50; for the + * WGS84 ellipsoid, the errors are less than 15 nanometers. (Reasonably + * accurate results are obtained for |f| < 1/5.) For a prolate + * ellipsoid, specify \e f < 0. + * + * The routines also calculate several other quantities of interest + * - \e S12 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 (\e lat1,\e lon1), (0,\e lon1), (0,\e lon2), + * and (\e lat2,\e lon2). + * - \e m12, the reduced length of the geodesic is defined such that if + * the initial azimuth is perturbed by \e dazi1 (radians) then the + * second point is displaced by \e m12 \e dazi1 in the direction + * perpendicular to the geodesic. On a curved surface the reduced + * length obeys a symmetry relation, \e m12 + \e m21 = 0. On a flat + * surface, we have \e m12 = \e s12. + * - \e M12 and \e M21 are geodesic scales. If two geodesics are + * parallel at point 1 and separated by a small distance \e dt, then + * they are separated by a distance \e M12 \e dt at point 2. \e M21 + * is defined similarly (with the geodesics being parallel to one + * another at point 2). On a flat surface, we have \e M12 = \e M21 + * = 1. + * - \e a12 is the arc length on the auxiliary sphere. This is a + * construct for converting the problem to one in spherical + * trigonometry. \e a12 is measured in degrees. The spherical arc + * length from one equator crossing to the next is always 180°. + * + * If points 1, 2, and 3 lie on a single geodesic, then the following + * addition rules hold: + * - \e s13 = \e s12 + \e s23 + * - \e a13 = \e a12 + \e a23 + * - \e S13 = \e S12 + \e S23 + * - \e m13 = \e m12 \e M23 + \e m23 \e M21 + * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e + * m23 / \e m12 + * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e + * m12 / \e m23 + * + * The shortest distance returned by the solution of the inverse problem is + * (obviously) uniquely defined. However, in a few special cases there are + * multiple azimuths which yield the same shortest distance. Here is a + * catalog of those cases: + * - \e lat1 = −\e lat2 (with neither point at a pole). If \e azi1 = \e + * azi2, the geodesic is unique. Otherwise there are two geodesics and the + * second one is obtained by setting [\e azi1, \e azi2] → [\e azi2, \e + * azi1], [\e M12, \e M21] → [\e M21, \e M12], \e S12 → −\e + * S12. (This occurs when the longitude difference is near ±180° + * for oblate ellipsoids.) + * - \e lon2 = \e lon1 ± 180° (with neither point at a pole). If \e + * azi1 = 0° or ±180°, the geodesic is unique. Otherwise + * there are two geodesics and the second one is obtained by setting [\e + * azi1, \e azi2] → [−\e azi1, −\e azi2], \e S12 → + * −\e S12. (This occurs when \e lat2 is near −\e lat1 for + * prolate ellipsoids.) + * - Points 1 and 2 at opposite poles. There are infinitely many geodesics + * which can be generated by setting [\e azi1, \e azi2] → [\e azi1, \e + * azi2] + [\e d, −\e d], for arbitrary \e d. (For spheres, this + * prescription applies when points 1 and 2 are antipodal.) + * - \e s12 = 0 (coincident points). There are infinitely many geodesics which + * can be generated by setting [\e azi1, \e azi2] → [\e azi1, \e azi2] + + * [\e d, \e d], for arbitrary \e d. + * + * These routines are a simple transcription of the corresponding C++ classes + * in GeographicLib. The + * "class data" is represented by the structs geod_geodesic, geod_geodesicline, + * geod_polygon and pointers to these objects are passed as initial arguments + * to the member functions. Most of the internal comments have been retained. + * However, in the process of transcription some documentation has been lost + * and the documentation for the C++ classes, GeographicLib::Geodesic, + * GeographicLib::GeodesicLine, and GeographicLib::PolygonAreaT, should be + * consulted. The C++ code remains the "reference implementation". Think + * twice about restructuring the internals of the C code since this may make + * porting fixes from the C++ code more difficult. + * + * Copyright (c) Charles Karney (2012-2016) and licensed + * under the MIT/X11 License. For more information, see + * http://geographiclib.sourceforge.net/ + * + * This library was distributed with + * GeographicLib 1.46. + **********************************************************************/ + +#if !defined(GEODESIC_H) +#define GEODESIC_H 1 + +/** + * The major version of the geodesic library. (This tracks the version of + * GeographicLib.) + **********************************************************************/ +#define GEODESIC_VERSION_MAJOR 1 +/** + * The minor version of the geodesic library. (This tracks the version of + * GeographicLib.) + **********************************************************************/ +#define GEODESIC_VERSION_MINOR 46 +/** + * The patch level of the geodesic library. (This tracks the version of + * GeographicLib.) + **********************************************************************/ +#define GEODESIC_VERSION_PATCH 1 + +/** + * Pack the version components into a single integer. Users should not rely on + * this particular packing of the components of the version number; see the + * documentation for GEODESIC_VERSION, below. + **********************************************************************/ +#define GEODESIC_VERSION_NUM(a,b,c) ((((a) * 10000 + (b)) * 100) + (c)) + +/** + * The version of the geodesic library as a single integer, packed as MMmmmmpp + * where MM is the major version, mmmm is the minor version, and pp is the + * patch level. Users should not rely on this particular packing of the + * components of the version number. Instead they should use a test such as + * @code{.c} + #if GEODESIC_VERSION >= GEODESIC_VERSION_NUM(1,40,0) + ... + #endif + * @endcode + **********************************************************************/ +#define GEODESIC_VERSION \ + GEODESIC_VERSION_NUM(GEODESIC_VERSION_MAJOR, \ + GEODESIC_VERSION_MINOR, \ + GEODESIC_VERSION_PATCH) + +#if defined(__cplusplus) +extern "C" { +#endif + + /** + * The struct containing information about the ellipsoid. This must be + * initialized by geod_init() before use. + **********************************************************************/ + struct geod_geodesic { + double a; /**< the equatorial radius */ + double f; /**< the flattening */ + /**< @cond SKIP */ + double f1, e2, ep2, n, b, c2, etol2; + double A3x[6], C3x[15], C4x[21]; + /**< @endcond */ + }; + + /** + * The struct containing information about a single geodesic. This must be + * initialized by geod_lineinit(), geod_directline(), geod_gendirectline(), + * or geod_inverseline() before use. + **********************************************************************/ + struct geod_geodesicline { + double lat1; /**< the starting latitude */ + double lon1; /**< the starting longitude */ + double azi1; /**< the starting azimuth */ + double a; /**< the equatorial radius */ + double f; /**< the flattening */ + double salp1; /**< sine of \e azi1 */ + double calp1; /**< cosine of \e azi1 */ + double a13; /**< arc length to reference point */ + double s13; /**< distance to reference point */ + /**< @cond SKIP */ + double b, c2, f1, salp0, calp0, k2, + 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]; + /**< @endcond */ + unsigned caps; /**< the capabilities */ + }; + + /** + * The struct for accumulating information about a geodesic polygon. This is + * used for computing the perimeter and area of a polygon. This must be + * initialized by geod_polygon_init() before use. + **********************************************************************/ + struct geod_polygon { + double lat; /**< the current latitude */ + double lon; /**< the current longitude */ + /**< @cond SKIP */ + double lat0; + double lon0; + double A[2]; + double P[2]; + int polyline; + int crossings; + /**< @endcond */ + unsigned num; /**< the number of points so far */ + }; + + /** + * Initialize a geod_geodesic object. + * + * @param[out] g a pointer to the object to be initialized. + * @param[in] a the equatorial radius (meters). + * @param[in] f the flattening. + **********************************************************************/ + void geod_init(struct geod_geodesic* g, double a, double f); + + /** + * Solve the direct geodesic problem. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] azi1 azimuth at point 1 (degrees). + * @param[in] s12 distance from point 1 to point 2 (meters); it can be + * negative. + * @param[out] plat2 pointer to the latitude of point 2 (degrees). + * @param[out] plon2 pointer to the longitude of point 2 (degrees). + * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). + * + * \e g must have been initialized with a call to geod_init(). \e lat1 + * should be in the range [−90°, 90°]. The values of \e lon2 + * and \e azi2 returned are in the range [−180°, 180°). Any of + * the "return" arguments \e plat2, etc., may be replaced by 0, if you do not + * need some quantities computed. + * + * If either point is at a pole, the azimuth is defined by keeping the + * longitude fixed, writing \e lat = ±(90° − ε), and + * taking the limit ε → 0+. An arc length greater that 180° + * signifies a geodesic which is not a shortest path. (For a prolate + * ellipsoid, an additional condition is necessary for a shortest path: the + * longitudinal extent must not exceed of 180°.) + * + * Example, determine the point 10000 km NE of JFK: + @code{.c} + struct geod_geodesic g; + double lat, lon; + geod_init(&g, 6378137, 1/298.257223563); + geod_direct(&g, 40.64, -73.78, 45.0, 10e6, &lat, &lon, 0); + printf("%.5f %.5f\n", lat, lon); + @endcode + **********************************************************************/ + void geod_direct(const struct geod_geodesic* g, + double lat1, double lon1, double azi1, double s12, + double* plat2, double* plon2, double* pazi2); + + /** + * The general direct geodesic problem. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] azi1 azimuth at point 1 (degrees). + * @param[in] flags bitor'ed combination of geod_flags(); \e flags & + * GEOD_ARCMODE determines the meaning of \e s12_a12 and \e flags & + * GEOD_LONG_UNROLL "unrolls" \e lon2. + * @param[in] s12_a12 if \e flags & GEOD_ARCMODE is 0, this is the distance + * from point 1 to point 2 (meters); otherwise it is the arc length + * from point 1 to point 2 (degrees); it can be negative. + * @param[out] plat2 pointer to the latitude of point 2 (degrees). + * @param[out] plon2 pointer to the longitude of point 2 (degrees). + * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). + * @param[out] ps12 pointer to the distance from point 1 to point 2 + * (meters). + * @param[out] pm12 pointer to the reduced length of geodesic (meters). + * @param[out] pM12 pointer to the geodesic scale of point 2 relative to + * point 1 (dimensionless). + * @param[out] pM21 pointer to the geodesic scale of point 1 relative to + * point 2 (dimensionless). + * @param[out] pS12 pointer to the area under the geodesic + * (meters2). + * @return \e a12 arc length from point 1 to point 2 (degrees). + * + * \e g must have been initialized with a call to geod_init(). \e lat1 + * should be in the range [−90°, 90°]. The function value \e + * a12 equals \e s12_a12 if \e flags & GEOD_ARCMODE. Any of the "return" + * arguments, \e plat2, etc., may be replaced by 0, if you do not need some + * quantities computed. + * + * With \e flags & GEOD_LONG_UNROLL bit set, the longitude is "unrolled" so + * that the quantity \e lon2 − \e lon1 indicates how many times and in + * what sense the geodesic encircles the ellipsoid. + **********************************************************************/ + double geod_gendirect(const struct geod_geodesic* g, + double lat1, double lon1, double azi1, + unsigned flags, double s12_a12, + double* plat2, double* plon2, double* pazi2, + double* ps12, double* pm12, double* pM12, double* pM21, + double* pS12); + + /** + * Solve the inverse geodesic problem. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] lat2 latitude of point 2 (degrees). + * @param[in] lon2 longitude of point 2 (degrees). + * @param[out] ps12 pointer to the distance from point 1 to point 2 + * (meters). + * @param[out] pazi1 pointer to the azimuth at point 1 (degrees). + * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). + * + * \e g must have been initialized with a call to geod_init(). \e lat1 and + * \e lat2 should be in the range [−90°, 90°]. The values of + * \e azi1 and \e azi2 returned are in the range [−180°, 180°). + * Any of the "return" arguments, \e ps12, etc., may be replaced by 0, if you + * do not need some quantities computed. + * + * If either point is at a pole, the azimuth is defined by keeping the + * longitude fixed, writing \e lat = ±(90° − ε), and + * taking the limit ε → 0+. + * + * The solution to the inverse problem is found using Newton's method. If + * this fails to converge (this is very unlikely in geodetic applications + * but does occur for very eccentric ellipsoids), then the bisection method + * is used to refine the solution. + * + * Example, determine the distance between JFK and Singapore Changi Airport: + @code{.c} + struct geod_geodesic g; + double s12; + geod_init(&g, 6378137, 1/298.257223563); + geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, 0, 0); + printf("%.3f\n", s12); + @endcode + **********************************************************************/ + void geod_inverse(const struct geod_geodesic* g, + double lat1, double lon1, double lat2, double lon2, + double* ps12, double* pazi1, double* pazi2); + + /** + * The general inverse geodesic calculation. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] lat2 latitude of point 2 (degrees). + * @param[in] lon2 longitude of point 2 (degrees). + * @param[out] ps12 pointer to the distance from point 1 to point 2 + * (meters). + * @param[out] pazi1 pointer to the azimuth at point 1 (degrees). + * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). + * @param[out] pm12 pointer to the reduced length of geodesic (meters). + * @param[out] pM12 pointer to the geodesic scale of point 2 relative to + * point 1 (dimensionless). + * @param[out] pM21 pointer to the geodesic scale of point 1 relative to + * point 2 (dimensionless). + * @param[out] pS12 pointer to the area under the geodesic + * (meters2). + * @return \e a12 arc length from point 1 to point 2 (degrees). + * + * \e g must have been initialized with a call to geod_init(). \e lat1 and + * \e lat2 should be in the range [−90°, 90°]. Any of the + * "return" arguments \e ps12, etc., may be replaced by 0, if you do not need + * some quantities computed. + **********************************************************************/ + double geod_geninverse(const struct geod_geodesic* g, + double lat1, double lon1, double lat2, double lon2, + double* ps12, double* pazi1, double* pazi2, + double* pm12, double* pM12, double* pM21, + double* pS12); + + /** + * Initialize a geod_geodesicline object. + * + * @param[out] l a pointer to the object to be initialized. + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] azi1 azimuth at point 1 (degrees). + * @param[in] caps bitor'ed combination of geod_mask() values specifying the + * capabilities the geod_geodesicline object should possess, i.e., which + * quantities can be returned in calls to geod_position() and + * geod_genposition(). + * + * \e g must have been initialized with a call to geod_init(). \e lat1 + * should be in the range [−90°, 90°]. + * + * The geod_mask values are [see geod_mask()]: + * - \e caps |= GEOD_LATITUDE for the latitude \e lat2; this is + * added automatically, + * - \e caps |= GEOD_LONGITUDE for the latitude \e lon2, + * - \e caps |= GEOD_AZIMUTH for the latitude \e azi2; this is + * added automatically, + * - \e caps |= GEOD_DISTANCE for the distance \e s12, + * - \e caps |= GEOD_REDUCEDLENGTH for the reduced length \e m12, + * - \e caps |= GEOD_GEODESICSCALE for the geodesic scales \e M12 + * and \e M21, + * - \e caps |= GEOD_AREA for the area \e S12, + * - \e caps |= GEOD_DISTANCE_IN permits the length of the + * geodesic to be given in terms of \e s12; without this capability the + * length can only be specified in terms of arc length. + * . + * A value of \e caps = 0 is treated as GEOD_LATITUDE | GEOD_LONGITUDE | + * GEOD_AZIMUTH | GEOD_DISTANCE_IN (to support the solution of the "standard" + * direct problem). + * + * When initialized by this function, point 3 is undefined (l->s13 = l->a13 = + * NaN). + **********************************************************************/ + void geod_lineinit(struct geod_geodesicline* l, + const struct geod_geodesic* g, + double lat1, double lon1, double azi1, unsigned caps); + + /** + * Initialize a geod_geodesicline object in terms of the direct geodesic + * problem. + * + * @param[out] l a pointer to the object to be initialized. + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] azi1 azimuth at point 1 (degrees). + * @param[in] s12 distance from point 1 to point 2 (meters); it can be + * negative. + * @param[in] caps bitor'ed combination of geod_mask() values specifying the + * capabilities the geod_geodesicline object should possess, i.e., which + * quantities can be returned in calls to geod_position() and + * geod_genposition(). + * + * This function sets point 3 of the geod_geodesicline to correspond to point + * 2 of the direct geodesic problem. See geod_lineinit() for more + * informaion. + **********************************************************************/ + void geod_directline(struct geod_geodesicline* l, + const struct geod_geodesic* g, + double lat1, double lon1, double azi1, double s12, + unsigned caps); + + /** + * Initialize a geod_geodesicline object in terms of the direct geodesic + * problem spacified in terms of either distance or arc length. + * + * @param[out] l a pointer to the object to be initialized. + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] azi1 azimuth at point 1 (degrees). + * @param[in] flags either GEOD_NOFLAGS or GEOD_ARCMODE to determining the + * meaning of the \e s12_a12. + * @param[in] s12_a12 if \e flags = GEOD_NOFLAGS, this is the distance + * from point 1 to point 2 (meters); if \e flags = GEOD_ARCMODE, it is + * the arc length from point 1 to point 2 (degrees); it can be + * negative. + * @param[in] caps bitor'ed combination of geod_mask() values specifying the + * capabilities the geod_geodesicline object should possess, i.e., which + * quantities can be returned in calls to geod_position() and + * geod_genposition(). + * + * This function sets point 3 of the geod_geodesicline to correspond to point + * 2 of the direct geodesic problem. See geod_lineinit() for more + * informaion. + **********************************************************************/ + void geod_gendirectline(struct geod_geodesicline* l, + const struct geod_geodesic* g, + double lat1, double lon1, double azi1, + unsigned flags, double s12_a12, + unsigned caps); + + /** + * Initialize a geod_geodesicline object in terms of the inverse geodesic + * problem. + * + * @param[out] l a pointer to the object to be initialized. + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lat1 latitude of point 1 (degrees). + * @param[in] lon1 longitude of point 1 (degrees). + * @param[in] lat2 latitude of point 2 (degrees). + * @param[in] lon2 longitude of point 2 (degrees). + * @param[in] caps bitor'ed combination of geod_mask() values specifying the + * capabilities the geod_geodesicline object should possess, i.e., which + * quantities can be returned in calls to geod_position() and + * geod_genposition(). + * + * This function sets point 3 of the geod_geodesicline to correspond to point + * 2 of the inverse geodesic problem. See geod_lineinit() for more + * informaion. + **********************************************************************/ + void geod_inverseline(struct geod_geodesicline* l, + const struct geod_geodesic* g, + double lat1, double lon1, double lat2, double lon2, + unsigned caps); + + /** + * Compute the position along a geod_geodesicline. + * + * @param[in] l a pointer to the geod_geodesicline object specifying the + * geodesic line. + * @param[in] s12 distance from point 1 to point 2 (meters); it can be + * negative. + * @param[out] plat2 pointer to the latitude of point 2 (degrees). + * @param[out] plon2 pointer to the longitude of point 2 (degrees); requires + * that \e l was initialized with \e caps |= GEOD_LONGITUDE. + * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). + * + * \e l must have been initialized with a call, e.g., to geod_lineinit(), + * with \e caps |= GEOD_DISTANCE_IN. The values of \e lon2 and \e azi2 + * returned are in the range [−180°, 180°). Any of the + * "return" arguments \e plat2, etc., may be replaced by 0, if you do not + * need some quantities computed. + * + * Example, compute way points between JFK and Singapore Changi Airport + * the "obvious" way using geod_direct(): + @code{.c} + struct geod_geodesic g; + double s12, azi1, lat[101],lon[101]; + int i; + geod_init(&g, 6378137, 1/298.257223563); + geod_inverse(&g, 40.64, -73.78, 1.36, 103.99, &s12, &azi1, 0); + for (i = 0; i < 101; ++i) { + geod_direct(&g, 40.64, -73.78, azi1, i * s12 * 0.01, lat + i, lon + i, 0); + printf("%.5f %.5f\n", lat[i], lon[i]); + } + @endcode + * A faster way using geod_position(): + @code{.c} + struct geod_geodesic g; + struct geod_geodesicline l; + double lat[101],lon[101]; + int i; + geod_init(&g, 6378137, 1/298.257223563); + geod_inverseline(&l, &g, 40.64, -73.78, 1.36, 103.99, 0); + for (i = 0; i <= 100; ++i) { + geod_position(&l, i * l.s13 * 0.01, lat + i, lon + i, 0); + printf("%.5f %.5f\n", lat[i], lon[i]); + } + @endcode + **********************************************************************/ + void geod_position(const struct geod_geodesicline* l, double s12, + double* plat2, double* plon2, double* pazi2); + + /** + * The general position function. + * + * @param[in] l a pointer to the geod_geodesicline object specifying the + * geodesic line. + * @param[in] flags bitor'ed combination of geod_flags(); \e flags & + * GEOD_ARCMODE determines the meaning of \e s12_a12 and \e flags & + * GEOD_LONG_UNROLL "unrolls" \e lon2; if \e flags & GEOD_ARCMODE is 0, + * then \e l must have been initialized with \e caps |= GEOD_DISTANCE_IN. + * @param[in] s12_a12 if \e flags & GEOD_ARCMODE is 0, this is the + * distance from point 1 to point 2 (meters); otherwise it is the + * arc length from point 1 to point 2 (degrees); it can be + * negative. + * @param[out] plat2 pointer to the latitude of point 2 (degrees). + * @param[out] plon2 pointer to the longitude of point 2 (degrees); requires + * that \e l was initialized with \e caps |= GEOD_LONGITUDE. + * @param[out] pazi2 pointer to the (forward) azimuth at point 2 (degrees). + * @param[out] ps12 pointer to the distance from point 1 to point 2 + * (meters); requires that \e l was initialized with \e caps |= + * GEOD_DISTANCE. + * @param[out] pm12 pointer to the reduced length of geodesic (meters); + * requires that \e l was initialized with \e caps |= GEOD_REDUCEDLENGTH. + * @param[out] pM12 pointer to the geodesic scale of point 2 relative to + * point 1 (dimensionless); requires that \e l was initialized with \e caps + * |= GEOD_GEODESICSCALE. + * @param[out] pM21 pointer to the geodesic scale of point 1 relative to + * point 2 (dimensionless); requires that \e l was initialized with \e caps + * |= GEOD_GEODESICSCALE. + * @param[out] pS12 pointer to the area under the geodesic + * (meters2); requires that \e l was initialized with \e caps |= + * GEOD_AREA. + * @return \e a12 arc length from point 1 to point 2 (degrees). + * + * \e l must have been initialized with a call to geod_lineinit() with \e + * caps |= GEOD_DISTANCE_IN. The value \e azi2 returned is in the range + * [−180°, 180°). Any of the "return" arguments \e plat2, + * etc., may be replaced by 0, if you do not need some quantities + * computed. Requesting a value which \e l is not capable of computing + * is not an error; the corresponding argument will not be altered. + * + * With \e flags & GEOD_LONG_UNROLL bit set, the longitude is "unrolled" so + * that the quantity \e lon2 − \e lon1 indicates how many times and in + * what sense the geodesic encircles the ellipsoid. + * + * Example, compute way points between JFK and Singapore Changi Airport using + * geod_genposition(). In this example, the points are evenly space in arc + * length (and so only approximately equally spaced in distance). This is + * faster than using geod_position() and would be appropriate if drawing the + * path on a map. + @code{.c} + struct geod_geodesic g; + struct geod_geodesicline l; + double lat[101], lon[101]; + int i; + geod_init(&g, 6378137, 1/298.257223563); + geod_inverseline(&l, &g, 40.64, -73.78, 1.36, 103.99, + GEOD_LATITUDE | GEOD_LONGITUDE); + for (i = 0; i <= 100; ++i) { + geod_genposition(&l, GEOD_ARCMODE, i * l.a13 * 0.01, + lat + i, lon + i, 0, 0, 0, 0, 0, 0); + printf("%.5f %.5f\n", lat[i], lon[i]); + } + @endcode + **********************************************************************/ + double geod_genposition(const struct geod_geodesicline* l, + unsigned flags, double s12_a12, + double* plat2, double* plon2, double* pazi2, + double* ps12, double* pm12, + double* pM12, double* pM21, + double* pS12); + + /** + * Specify position of point 3 in terms of distance. + * + * @param[inout] l a pointer to the geod_geodesicline object. + * @param[in] s13 the distance from point 1 to point 3 (meters); it + * can be negative. + * + * This is only useful if the geod_geodesicline object has been constructed + * with \e caps |= GEOD_DISTANCE_IN. + **********************************************************************/ + void geod_setdistance(struct geod_geodesicline* l, double s13); + + /** + * Specify position of point 3 in terms of either distance or arc length. + * + * @param[inout] l a pointer to the geod_geodesicline object. + * @param[in] flags either GEOD_NOFLAGS or GEOD_ARCMODE to determining the + * meaning of the \e s13_a13. + * @param[in] s13_a13 if \e flags = GEOD_NOFLAGS, this is the distance + * from point 1 to point 3 (meters); if \e flags = GEOD_ARCMODE, it is + * the arc length from point 1 to point 3 (degrees); it can be + * negative. + * + * If flags = GEOD_NOFLAGS, this calls geod_setdistance(). If flags = + * GEOD_ARCMODE, the \e s13 is only set if the geod_geodesicline object has + * been constructed with \e caps |= GEOD_DISTANCE. + **********************************************************************/ + void geod_gensetdistance(struct geod_geodesicline* l, + unsigned flags, double s13_a13); + + /** + * Initialize a geod_polygon object. + * + * @param[out] p a pointer to the object to be initialized. + * @param[in] polylinep non-zero if a polyline instead of a polygon. + * + * If \e polylinep is zero, then the sequence of vertices and edges added by + * geod_polygon_addpoint() and geod_polygon_addedge() define a polygon and + * the perimeter and area are returned by geod_polygon_compute(). If \e + * polylinep is non-zero, then the vertices and edges define a polyline and + * only the perimeter is returned by geod_polygon_compute(). + * + * The area and perimeter are accumulated at two times the standard floating + * point precision to guard against the loss of accuracy with many-sided + * polygons. At any point you can ask for the perimeter and area so far. + * + * An example of the use of this function is given in the documentation for + * geod_polygon_compute(). + **********************************************************************/ + void geod_polygon_init(struct geod_polygon* p, int polylinep); + + /** + * Clear the polygon, allowing a new polygon to be started. + * + * @param[in,out] p a pointer to the object to be cleared. + **********************************************************************/ + void geod_polygon_clear(struct geod_polygon* p); + + /** + * Add a point to the polygon or polyline. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in,out] p a pointer to the geod_polygon object specifying the + * polygon. + * @param[in] lat the latitude of the point (degrees). + * @param[in] lon the longitude of the point (degrees). + * + * \e g and \e p must have been initialized with calls to geod_init() and + * geod_polygon_init(), respectively. The same \e g must be used for all the + * points and edges in a polygon. \e lat should be in the range + * [−90°, 90°]. + * + * An example of the use of this function is given in the documentation for + * geod_polygon_compute(). + **********************************************************************/ + void geod_polygon_addpoint(const struct geod_geodesic* g, + struct geod_polygon* p, + double lat, double lon); + + /** + * Add an edge to the polygon or polyline. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in,out] p a pointer to the geod_polygon object specifying the + * polygon. + * @param[in] azi azimuth at current point (degrees). + * @param[in] s distance from current point to next point (meters). + * + * \e g and \e p must have been initialized with calls to geod_init() and + * geod_polygon_init(), respectively. The same \e g must be used for all the + * points and edges in a polygon. This does nothing if no points have been + * added yet. The \e lat and \e lon fields of \e p give the location of the + * new vertex. + **********************************************************************/ + void geod_polygon_addedge(const struct geod_geodesic* g, + struct geod_polygon* p, + double azi, double s); + + /** + * Return the results for a polygon. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] p a pointer to the geod_polygon object specifying the polygon. + * @param[in] reverse if non-zero then clockwise (instead of + * counter-clockwise) traversal counts as a positive area. + * @param[in] sign if non-zero then return a signed result for the area if + * the polygon is traversed in the "wrong" direction instead of returning + * the area for the rest of the earth. + * @param[out] pA pointer to the area of the polygon (meters2); + * only set if \e polyline is non-zero in the call to geod_polygon_init(). + * @param[out] pP pointer to the perimeter of the polygon or length of the + * polyline (meters). + * @return the number of points. + * + * The area and perimeter are accumulated at two times the standard floating + * point precision to guard against the loss of accuracy with many-sided + * polygons. Only simple polygons (which are not self-intersecting) are + * allowed. There's no need to "close" the polygon by repeating the first + * vertex. Set \e pA or \e pP to zero, if you do not want the corresponding + * quantity returned. + * + * More points can be added to the polygon after this call. + * + * Example, compute the perimeter and area of the geodesic triangle with + * vertices (0°N,0°E), (0°N,90°E), (90°N,0°E). + @code{.c} + double A, P; + int n; + struct geod_geodesic g; + struct geod_polygon p; + geod_init(&g, 6378137, 1/298.257223563); + geod_polygon_init(&p, 0); + + geod_polygon_addpoint(&g, &p, 0, 0); + geod_polygon_addpoint(&g, &p, 0, 90); + geod_polygon_addpoint(&g, &p, 90, 0); + n = geod_polygon_compute(&g, &p, 0, 1, &A, &P); + printf("%d %.8f %.3f\n", n, P, A); + @endcode + **********************************************************************/ + unsigned geod_polygon_compute(const struct geod_geodesic* g, + const struct geod_polygon* p, + int reverse, int sign, + double* pA, double* pP); + + /** + * Return the results assuming a tentative final test point is added; + * however, the data for the test point is not saved. This lets you report a + * running result for the perimeter and area as the user moves the mouse + * cursor. Ordinary floating point arithmetic is used to accumulate the data + * for the test point; thus the area and perimeter returned are less accurate + * than if geod_polygon_addpoint() and geod_polygon_compute() are used. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] p a pointer to the geod_polygon object specifying the polygon. + * @param[in] lat the latitude of the test point (degrees). + * @param[in] lon the longitude of the test point (degrees). + * @param[in] reverse if non-zero then clockwise (instead of + * counter-clockwise) traversal counts as a positive area. + * @param[in] sign if non-zero then return a signed result for the area if + * the polygon is traversed in the "wrong" direction instead of returning + * the area for the rest of the earth. + * @param[out] pA pointer to the area of the polygon (meters2); + * only set if \e polyline is non-zero in the call to geod_polygon_init(). + * @param[out] pP pointer to the perimeter of the polygon or length of the + * polyline (meters). + * @return the number of points. + * + * \e lat should be in the range [−90°, 90°]. + **********************************************************************/ + unsigned geod_polygon_testpoint(const struct geod_geodesic* g, + const struct geod_polygon* p, + double lat, double lon, + int reverse, int sign, + double* pA, double* pP); + + /** + * Return the results assuming a tentative final test point is added via an + * azimuth and distance; however, the data for the test point is not saved. + * This lets you report a running result for the perimeter and area as the + * user moves the mouse cursor. Ordinary floating point arithmetic is used + * to accumulate the data for the test point; thus the area and perimeter + * returned are less accurate than if geod_polygon_addedge() and + * geod_polygon_compute() are used. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] p a pointer to the geod_polygon object specifying the polygon. + * @param[in] azi azimuth at current point (degrees). + * @param[in] s distance from current point to final test point (meters). + * @param[in] reverse if non-zero then clockwise (instead of + * counter-clockwise) traversal counts as a positive area. + * @param[in] sign if non-zero then return a signed result for the area if + * the polygon is traversed in the "wrong" direction instead of returning + * the area for the rest of the earth. + * @param[out] pA pointer to the area of the polygon (meters2); + * only set if \e polyline is non-zero in the call to geod_polygon_init(). + * @param[out] pP pointer to the perimeter of the polygon or length of the + * polyline (meters). + * @return the number of points. + **********************************************************************/ + unsigned geod_polygon_testedge(const struct geod_geodesic* g, + const struct geod_polygon* p, + double azi, double s, + int reverse, int sign, + double* pA, double* pP); + + /** + * A simple interface for computing the area of a geodesic polygon. + * + * @param[in] g a pointer to the geod_geodesic object specifying the + * ellipsoid. + * @param[in] lats an array of latitudes of the polygon vertices (degrees). + * @param[in] lons an array of longitudes of the polygon vertices (degrees). + * @param[in] n the number of vertices. + * @param[out] pA pointer to the area of the polygon (meters2). + * @param[out] pP pointer to the perimeter of the polygon (meters). + * + * \e lats should be in the range [−90°, 90°]. + * + * Only simple polygons (which are not self-intersecting) are allowed. + * There's no need to "close" the polygon by repeating the first vertex. The + * area returned is signed with counter-clockwise traversal being treated as + * positive. + * + * Example, compute the area of Antarctica: + @code{.c} + double + lats[] = {-72.9, -71.9, -74.9, -74.3, -77.5, -77.4, -71.7, -65.9, -65.7, + -66.6, -66.9, -69.8, -70.0, -71.0, -77.3, -77.9, -74.7}, + lons[] = {-74, -102, -102, -131, -163, 163, 172, 140, 113, + 88, 59, 25, -4, -14, -33, -46, -61}; + struct geod_geodesic g; + double A, P; + geod_init(&g, 6378137, 1/298.257223563); + geod_polygonarea(&g, lats, lons, (sizeof lats) / (sizeof lats[0]), &A, &P); + printf("%.0f %.2f\n", A, P); + @endcode + **********************************************************************/ + void geod_polygonarea(const struct geod_geodesic* g, + double lats[], double lons[], int n, + double* pA, double* pP); + + /** + * mask values for the \e caps argument to geod_lineinit(). + **********************************************************************/ + enum geod_mask { + GEOD_NONE = 0U, /**< Calculate nothing */ + GEOD_LATITUDE = 1U<<7 | 0U, /**< Calculate latitude */ + GEOD_LONGITUDE = 1U<<8 | 1U<<3, /**< Calculate longitude */ + GEOD_AZIMUTH = 1U<<9 | 0U, /**< Calculate azimuth */ + GEOD_DISTANCE = 1U<<10 | 1U<<0, /**< Calculate distance */ + GEOD_DISTANCE_IN = 1U<<11 | 1U<<0 | 1U<<1, /**< Allow distance as input */ + GEOD_REDUCEDLENGTH= 1U<<12 | 1U<<0 | 1U<<2, /**< Calculate reduced length */ + GEOD_GEODESICSCALE= 1U<<13 | 1U<<0 | 1U<<2, /**< Calculate geodesic scale */ + GEOD_AREA = 1U<<14 | 1U<<4, /**< Calculate reduced length */ + GEOD_ALL = 0x7F80U| 0x1FU /**< Calculate everything */ + }; + + /** + * flag values for the \e flags argument to geod_gendirect() and + * geod_genposition() + **********************************************************************/ + enum geod_flags { + GEOD_NOFLAGS = 0U, /**< No flags */ + GEOD_ARCMODE = 1U<<0, /**< Position given in terms of arc distance */ + GEOD_LONG_UNROLL = 1U<<15 /**< Unroll the longitude */ + }; + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/proj4/src/geodtest.c b/proj4/src/geodtest.c new file mode 100644 index 000000000000..990a213e8d38 --- /dev/null +++ b/proj4/src/geodtest.c @@ -0,0 +1,768 @@ +/** + * \file geodtest.c + * \brief Test suite for the geodesic routines in C + * + * Run these tests by configuring with cmake and running "make test". + * + * Copyright (c) Charles Karney (2015-2016) and licensed + * under the MIT/X11 License. For more information, see + * http://geographiclib.sourceforge.net/ + **********************************************************************/ + +/** @cond SKIP */ + +#include "geodesic.h" +#include +#include + +#if defined(_MSC_VER) +// Squelch warnings about assignment within conditional expression +# pragma warning (disable: 4706) +#endif + +double wgs84_a = 6378137, wgs84_f = 1/298.257223563; /* WGS84 */ + +int assertEquals(double x, double y, double d) { + if (fabs(x - y) <= d) + return 0; + printf("assertEquals fails: %.7g != %.7g +/- %.7g\n", x, y, d); + return 1; +} + +const int ncases = 20; +double testcases[20][12] = { + {35.60777, -139.44815, 111.098748429560326, + -11.17491, -69.95921, 129.289270889708762, + 8935244.5604818305, 80.50729714281974, 6273170.2055303837, + 0.16606318447386067, 0.16479116945612937, 12841384694976.432}, + {55.52454, 106.05087, 22.020059880982801, + 77.03196, 197.18234, 109.112041110671519, + 4105086.1713924406, 36.892740690445894, 3828869.3344387607, + 0.80076349608092607, 0.80101006984201008, 61674961290615.615}, + {-21.97856, 142.59065, -32.44456876433189, + 41.84138, 98.56635, -41.84359951440466, + 8394328.894657671, 75.62930491011522, 6161154.5773110616, + 0.24816339233950381, 0.24930251203627892, -6637997720646.717}, + {-66.99028, 112.2363, 173.73491240878403, + -12.70631, 285.90344, 2.512956620913668, + 11150344.2312080241, 100.278634181155759, 6289939.5670446687, + -0.17199490274700385, -0.17722569526345708, -121287239862139.744}, + {-17.42761, 173.34268, -159.033557661192928, + -15.84784, 5.93557, -20.787484651536988, + 16076603.1631180673, 144.640108810286253, 3732902.1583877189, + -0.81273638700070476, -0.81299800519154474, 97825992354058.708}, + {32.84994, 48.28919, 150.492927788121982, + -56.28556, 202.29132, 48.113449399816759, + 16727068.9438164461, 150.565799985466607, 3147838.1910180939, + -0.87334918086923126, -0.86505036767110637, -72445258525585.010}, + {6.96833, 52.74123, 92.581585386317712, + -7.39675, 206.17291, 90.721692165923907, + 17102477.2496958388, 154.147366239113561, 2772035.6169917581, + -0.89991282520302447, -0.89986892177110739, -1311796973197.995}, + {-50.56724, -16.30485, -105.439679907590164, + -33.56571, -94.97412, -47.348547835650331, + 6455670.5118668696, 58.083719495371259, 5409150.7979815838, + 0.53053508035997263, 0.52988722644436602, 41071447902810.047}, + {-58.93002, -8.90775, 140.965397902500679, + -8.91104, 133.13503, 19.255429433416599, + 11756066.0219864627, 105.755691241406877, 6151101.2270708536, + -0.26548622269867183, -0.27068483874510741, -86143460552774.735}, + {-68.82867, -74.28391, 93.774347763114881, + -50.63005, -8.36685, 34.65564085411343, + 3956936.926063544, 35.572254987389284, 3708890.9544062657, + 0.81443963736383502, 0.81420859815358342, -41845309450093.787}, + {-10.62672, -32.0898, -86.426713286747751, + 5.883, -134.31681, -80.473780971034875, + 11470869.3864563009, 103.387395634504061, 6184411.6622659713, + -0.23138683500430237, -0.23155097622286792, 4198803992123.548}, + {-21.76221, 166.90563, 29.319421206936428, + 48.72884, 213.97627, 43.508671946410168, + 9098627.3986554915, 81.963476716121964, 6299240.9166992283, + 0.13965943368590333, 0.14152969707656796, 10024709850277.476}, + {-19.79938, -174.47484, 71.167275780171533, + -11.99349, -154.35109, 65.589099775199228, + 2319004.8601169389, 20.896611684802389, 2267960.8703918325, + 0.93427001867125849, 0.93424887135032789, -3935477535005.785}, + {-11.95887, -116.94513, 92.712619830452549, + 4.57352, 7.16501, 78.64960934409585, + 13834722.5801401374, 124.688684161089762, 5228093.177931598, + -0.56879356755666463, -0.56918731952397221, -9919582785894.853}, + {-87.85331, 85.66836, -65.120313040242748, + 66.48646, 16.09921, -4.888658719272296, + 17286615.3147144645, 155.58592449699137, 2635887.4729110181, + -0.90697975771398578, -0.91095608883042767, 42667211366919.534}, + {1.74708, 128.32011, -101.584843631173858, + -11.16617, 11.87109, -86.325793296437476, + 12942901.1241347408, 116.650512484301857, 5682744.8413270572, + -0.44857868222697644, -0.44824490340007729, 10763055294345.653}, + {-25.72959, -144.90758, -153.647468693117198, + -57.70581, -269.17879, -48.343983158876487, + 9413446.7452453107, 84.664533838404295, 6356176.6898881281, + 0.09492245755254703, 0.09737058264766572, 74515122850712.444}, + {-41.22777, 122.32875, 14.285113402275739, + -7.57291, 130.37946, 10.805303085187369, + 3812686.035106021, 34.34330804743883, 3588703.8812128856, + 0.82605222593217889, 0.82572158200920196, -2456961531057.857}, + {11.01307, 138.25278, 79.43682622782374, + 6.62726, 247.05981, 103.708090215522657, + 11911190.819018408, 107.341669954114577, 6070904.722786735, + -0.29767608923657404, -0.29785143390252321, 17121631423099.696}, + {-29.47124, 95.14681, -163.779130441688382, + -27.46601, -69.15955, -15.909335945554969, + 13487015.8381145492, 121.294026715742277, 5481428.9945736388, + -0.51527225545373252, -0.51556587964721788, 104679964020340.318}}; + +int testinverse() { + double lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12; + double azi1a, azi2a, s12a, a12a, m12a, M12a, M21a, S12a; + struct geod_geodesic g; + int i, result = 0; + geod_init(&g, wgs84_a, wgs84_f); + for (i = 0; i < ncases; ++i) { + lat1 = testcases[i][0]; lon1 = testcases[i][1]; azi1 = testcases[i][2]; + lat2 = testcases[i][3]; lon2 = testcases[i][4]; azi2 = testcases[i][5]; + s12 = testcases[i][6]; a12 = testcases[i][7]; m12 = testcases[i][8]; + M12 = testcases[i][9]; M21 = testcases[i][10]; S12 = testcases[i][11]; + a12a = geod_geninverse(&g, lat1, lon1, lat2, lon2, &s12a, &azi1a, &azi2a, + &m12a, &M12a, &M21a, &S12a); + result += assertEquals(azi1, azi1a, 1e-13); + result += assertEquals(azi2, azi2a, 1e-13); + result += assertEquals(s12, s12a, 1e-8); + result += assertEquals(a12, a12a, 1e-13); + result += assertEquals(m12, m12a, 1e-8); + result += assertEquals(M12, M12a, 1e-15); + result += assertEquals(M21, M21a, 1e-15); + result += assertEquals(S12, S12a, 0.1); + } + return result; +} + +int testdirect() { + double lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12; + double lat2a, lon2a, azi2a, a12a, m12a, M12a, M21a, S12a; + struct geod_geodesic g; + int i, result = 0; + unsigned flags = GEOD_LONG_UNROLL; + geod_init(&g, wgs84_a, wgs84_f); + for (i = 0; i < ncases; ++i) { + lat1 = testcases[i][0]; lon1 = testcases[i][1]; azi1 = testcases[i][2]; + lat2 = testcases[i][3]; lon2 = testcases[i][4]; azi2 = testcases[i][5]; + s12 = testcases[i][6]; a12 = testcases[i][7]; m12 = testcases[i][8]; + M12 = testcases[i][9]; M21 = testcases[i][10]; S12 = testcases[i][11]; + a12a = geod_gendirect(&g, lat1, lon1, azi1, flags, s12, + &lat2a, &lon2a, &azi2a, 0, + &m12a, &M12a, &M21a, &S12a); + result += assertEquals(lat2, lat2a, 1e-13); + result += assertEquals(lon2, lon2a, 1e-13); + result += assertEquals(azi2, azi2a, 1e-13); + result += assertEquals(a12, a12a, 1e-13); + result += assertEquals(m12, m12a, 1e-8); + result += assertEquals(M12, M12a, 1e-15); + result += assertEquals(M21, M21a, 1e-15); + result += assertEquals(S12, S12a, 0.1); + } + return result; +} + +int testarcdirect() { + double lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12; + double lat2a, lon2a, azi2a, s12a, m12a, M12a, M21a, S12a; + struct geod_geodesic g; + int i, result = 0; + unsigned flags = GEOD_ARCMODE | GEOD_LONG_UNROLL; + geod_init(&g, wgs84_a, wgs84_f); + for (i = 0; i < ncases; ++i) { + lat1 = testcases[i][0]; lon1 = testcases[i][1]; azi1 = testcases[i][2]; + lat2 = testcases[i][3]; lon2 = testcases[i][4]; azi2 = testcases[i][5]; + s12 = testcases[i][6]; a12 = testcases[i][7]; m12 = testcases[i][8]; + M12 = testcases[i][9]; M21 = testcases[i][10]; S12 = testcases[i][11]; + geod_gendirect(&g, lat1, lon1, azi1, flags, a12, + &lat2a, &lon2a, &azi2a, &s12a, &m12a, &M12a, &M21a, &S12a); + result += assertEquals(lat2, lat2a, 1e-13); + result += assertEquals(lon2, lon2a, 1e-13); + result += assertEquals(azi2, azi2a, 1e-13); + result += assertEquals(s12, s12a, 1e-8); + result += assertEquals(m12, m12a, 1e-8); + result += assertEquals(M12, M12a, 1e-15); + result += assertEquals(M21, M21a, 1e-15); + result += assertEquals(S12, S12a, 0.1); + } + return result; +} + +int GeodSolve0() { + double azi1, azi2, s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 40.6, -73.8, 49.01666667, 2.55, &s12, &azi1, &azi2); + result += assertEquals(azi1, 53.47022, 0.5e-5); + result += assertEquals(azi2, 111.59367, 0.5e-5); + result += assertEquals(s12, 5853226, 0.5); + return result; +} + +int GeodSolve1() { + double lat2, lon2, azi2; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_direct(&g, 40.63972222, -73.77888889, 53.5, 5850e3, + &lat2, &lon2, &azi2); + result += assertEquals(lat2, 49.01467, 0.5e-5); + result += assertEquals(lon2, 2.56106, 0.5e-5); + result += assertEquals(azi2, 111.62947, 0.5e-5); + return result; +} + +int GeodSolve2() { + /* Check fix for antipodal prolate bug found 2010-09-04 */ + double azi1, azi2, s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, 6.4e6, -1/150.0); + geod_inverse(&g, 0.07476, 0, -0.07476, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 90.00078, 0.5e-5); + result += assertEquals(azi2, 90.00078, 0.5e-5); + result += assertEquals(s12, 20106193, 0.5); + geod_inverse(&g, 0.1, 0, -0.1, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 90.00105, 0.5e-5); + result += assertEquals(azi2, 90.00105, 0.5e-5); + result += assertEquals(s12, 20106193, 0.5); + return result; +} + +int GeodSolve4() { + /* Check fix for short line bug found 2010-05-21 */ + double s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 36.493349428792, 0, 36.49334942879201, .0000008, + &s12, 0, 0); + result += assertEquals(s12, 0.072, 0.5e-3); + return result; +} + +int GeodSolve5() { + /* Check fix for point2=pole bug found 2010-05-03 */ + double lat2, lon2, azi2; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_direct(&g, 0.01777745589997, 30, 0, 10e6, &lat2, &lon2, &azi2); + result += assertEquals(lat2, 90, 0.5e-5); + if (lon2 < 0) { + result += assertEquals(lon2, -150, 0.5e-5); + result += assertEquals(azi2, -180, 0.5e-5); + } else { + result += assertEquals(lon2, 30, 0.5e-5); + result += assertEquals(azi2, 0, 0.5e-5); + } + return result; +} + +int GeodSolve6() { + /* Check fix for volatile sbet12a bug found 2011-06-25 (gcc 4.4.4 + * x86 -O3). Found again on 2012-03-27 with tdm-mingw32 (g++ 4.6.1). */ + double s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 88.202499451857, 0, + -88.202499451857, 179.981022032992859592, &s12, 0, 0); + result += assertEquals(s12, 20003898.214, 0.5e-3); + geod_inverse(&g, 89.262080389218, 0, + -89.262080389218, 179.992207982775375662, &s12, 0, 0); + result += assertEquals(s12, 20003925.854, 0.5e-3); + geod_inverse(&g, 89.333123580033, 0, + -89.333123580032997687, 179.99295812360148422, &s12, 0, 0); + result += assertEquals(s12, 20003926.881, 0.5e-3); + return result; +} + +int GeodSolve9() { + /* Check fix for volatile x bug found 2011-06-25 (gcc 4.4.4 x86 -O3) */ + double s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 56.320923501171, 0, + -56.320923501171, 179.664747671772880215, &s12, 0, 0); + result += assertEquals(s12, 19993558.287, 0.5e-3); + return result; +} + +int GeodSolve10() { + /* Check fix for adjust tol1_ bug found 2011-06-25 (Visual Studio + * 10 rel + debug) */ + double s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 52.784459512564, 0, + -52.784459512563990912, 179.634407464943777557, &s12, 0, 0); + result += assertEquals(s12, 19991596.095, 0.5e-3); + return result; +} + +int GeodSolve11() { + /* Check fix for bet2 = -bet1 bug found 2011-06-25 (Visual Studio + * 10 rel + debug) */ + double s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 48.522876735459, 0, + -48.52287673545898293, 179.599720456223079643, &s12, 0, 0); + result += assertEquals(s12, 19989144.774, 0.5e-3); + return result; +} + +int GeodSolve12() { + /* Check fix for inverse geodesics on extreme prolate/oblate + * ellipsoids Reported 2012-08-29 Stefan Guenther + * ; fixed 2012-10-07 */ + double azi1, azi2, s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, 89.8, -1.83); + geod_inverse(&g, 0, 0, -10, 160, &s12, &azi1, &azi2); + result += assertEquals(azi1, 120.27, 1e-2); + result += assertEquals(azi2, 105.15, 1e-2); + result += assertEquals(s12, 266.7, 1e-1); + return result; +} + +int GeodSolve14() { + /* Check fix for inverse ignoring lon12 = nan */ + double azi1, azi2, s12, nan = sqrt(-1.0); + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 0, 0, 1, nan, &s12, &azi1, &azi2); + result += azi1 == azi1 ? 1 : 0; + result += azi2 == azi2 ? 1 : 0; + result += s12 == s12 ? 1 : 0; + return result; +} + +int GeodSolve15() { + /* Initial implementation of Math::eatanhe was wrong for e^2 < 0. This + * checks that this is fixed. */ + double S12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, 6.4e6, -1/150.0); + geod_gendirect(&g, 1, 2, 3, 0, 4, + 0, 0, 0, 0, 0, 0, 0, &S12); + result += assertEquals(S12, 23700, 0.5); + return result; +} + +int GeodSolve17() { + /* Check fix for LONG_UNROLL bug found on 2015-05-07 */ + double lat2, lon2, azi2; + struct geod_geodesic g; + struct geod_geodesicline l; + int result = 0; + unsigned flags = GEOD_LONG_UNROLL; + geod_init(&g, wgs84_a, wgs84_f); + geod_gendirect(&g, 40, -75, -10, flags, 2e7, + &lat2, &lon2, &azi2, 0, 0, 0, 0, 0); + result += assertEquals(lat2, -39, 1); + result += assertEquals(lon2, -254, 1); + result += assertEquals(azi2, -170, 1); + geod_lineinit(&l, &g, 40, -75, -10, 0); + geod_genposition(&l, flags, 2e7, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0); + result += assertEquals(lat2, -39, 1); + result += assertEquals(lon2, -254, 1); + result += assertEquals(azi2, -170, 1); + geod_direct(&g, 40, -75, -10, 2e7, &lat2, &lon2, &azi2); + result += assertEquals(lat2, -39, 1); + result += assertEquals(lon2, 105, 1); + result += assertEquals(azi2, -170, 1); + geod_position(&l, 2e7, &lat2, &lon2, &azi2); + result += assertEquals(lat2, -39, 1); + result += assertEquals(lon2, 105, 1); + result += assertEquals(azi2, -170, 1); + return result; +} + +int GeodSolve26() { + /* Check 0/0 problem with area calculation on sphere 2015-09-08 */ + double S12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, 6.4e6, 0); + geod_geninverse(&g, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, &S12); + result += assertEquals(S12, 49911046115.0, 0.5); + return result; +} + +int GeodSolve28() { + /* Check for bad placement of assignment of r.a12 with |f| > 0.01 (bug in + * Java implementation fixed on 2015-05-19). */ + double a12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, 6.4e6, 0.1); + a12 = geod_gendirect(&g, 1, 2, 10, 0, 5e6, 0, 0, 0, 0, 0, 0, 0, 0); + result += assertEquals(a12, 48.55570690, 0.5e-8); + return result; +} + +int GeodSolve33() { + /* Check max(-0.0,+0.0) issues 2015-08-22 (triggered by bugs in Octave -- + * sind(-0.0) = +0.0 -- and in some version of Visual Studio -- + * fmod(-0.0, 360.0) = +0.0. */ + double azi1, azi2, s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2); + result += assertEquals(azi1, 90.00000, 0.5e-5); + result += assertEquals(azi2, 90.00000, 0.5e-5); + result += assertEquals(s12, 19926189, 0.5); + geod_inverse(&g, 0, 0, 0, 179.5, &s12, &azi1, &azi2); + result += assertEquals(azi1, 55.96650, 0.5e-5); + result += assertEquals(azi2, 124.03350, 0.5e-5); + result += assertEquals(s12, 19980862, 0.5); + geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + result += assertEquals(s12, 20003931, 0.5); + geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + result += assertEquals(s12, 19893357, 0.5); + geod_init(&g, 6.4e6, 0); + geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2); + result += assertEquals(azi1, 90.00000, 0.5e-5); + result += assertEquals(azi2, 90.00000, 0.5e-5); + result += assertEquals(s12, 19994492, 0.5); + geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + result += assertEquals(s12, 20106193, 0.5); + geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + result += assertEquals(s12, 19994492, 0.5); + geod_init(&g, 6.4e6, -1/300.0); + geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2); + result += assertEquals(azi1, 90.00000, 0.5e-5); + result += assertEquals(azi2, 90.00000, 0.5e-5); + result += assertEquals(s12, 19994492, 0.5); + geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 90.00000, 0.5e-5); + result += assertEquals(azi2, 90.00000, 0.5e-5); + result += assertEquals(s12, 20106193, 0.5); + geod_inverse(&g, 0, 0, 0.5, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 33.02493, 0.5e-5); + result += assertEquals(azi2, 146.97364, 0.5e-5); + result += assertEquals(s12, 20082617, 0.5); + geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + result += assertEquals(s12, 20027270, 0.5); + + return result; +} + +int GeodSolve55() { + /* Check fix for nan + point on equator or pole not returning all nans in + * Geodesic::Inverse, found 2015-09-23. */ + double azi1, azi2, s12, nan = sqrt(-1.0); + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, nan, 0, 0, 90, &s12, &azi1, &azi2); + result += azi1 == azi1 ? 1 : 0; + result += azi2 == azi2 ? 1 : 0; + result += s12 == s12 ? 1 : 0; + geod_inverse(&g, nan, 0, 90, 9, &s12, &azi1, &azi2); + result += azi1 == azi1 ? 1 : 0; + result += azi2 == azi2 ? 1 : 0; + result += s12 == s12 ? 1 : 0; + return result; +} + +int GeodSolve59() { + /* Check for points close with longitudes close to 180 deg apart. */ + double azi1, azi2, s12; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverse(&g, 5, 0.00000000000001, 10, 180, &s12, &azi1, &azi2); + result += assertEquals(azi1, 0.000000000000035, 1.5e-14); + result += assertEquals(azi2, 179.99999999999996, 1.5e-14); + result += assertEquals(s12, 18345191.174332713, 2.5e-9); + return result; +} + +int GeodSolve61() { + /* Make sure small negative azimuths are west-going */ + double lat2, lon2, azi2; + struct geod_geodesic g; + struct geod_geodesicline l; + int result = 0; + unsigned flags = GEOD_LONG_UNROLL; + geod_init(&g, wgs84_a, wgs84_f); + geod_gendirect(&g, 45, 0, -0.000000000000000003, flags, 1e7, + &lat2, &lon2, &azi2, 0, 0, 0, 0, 0); + result += assertEquals(lat2, 45.30632, 0.5e-5); + result += assertEquals(lon2, -180, 0.5e-5); + result += assertEquals(azi2, -180, 0.5e-5); + geod_inverseline(&l, &g, 45, 0, 80, -0.000000000000000003, 0); + geod_genposition(&l, flags, 1e7, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0); + result += assertEquals(lat2, 45.30632, 0.5e-5); + result += assertEquals(lon2, -180, 0.5e-5); + result += assertEquals(azi2, -180, 0.5e-5); + return result; +} + +int GeodSolve65() { + /* Check for bug in east-going check in GeodesicLine (needed to check for + * sign of 0) and sign error in area calculation due to a bogus override of + * the code for alp12. Found/fixed on 2015-12-19. */ + double lat2, lon2, azi2, s12, a12, m12, M12, M21, S12; + struct geod_geodesic g; + struct geod_geodesicline l; + int result = 0; + unsigned flags = GEOD_LONG_UNROLL, caps = GEOD_ALL; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverseline(&l, &g, 30, -0.000000000000000001, -31, 180, caps); + a12 = geod_genposition(&l, flags, 1e7, + &lat2, &lon2, &azi2, &s12, &m12, &M12, &M21, &S12); + result += assertEquals(lat2, -60.23169, 0.5e-5); + result += assertEquals(lon2, -0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + result += assertEquals(s12, 10000000, 0.5); + result += assertEquals(a12, 90.06544, 0.5e-5); + result += assertEquals(m12, 6363636, 0.5); + result += assertEquals(M12, -0.0012834, 0.5e-7); + result += assertEquals(M21, 0.0013749, 0.5e-7); + result += assertEquals(S12, 0, 0.5); + a12 = geod_genposition(&l, flags, 2e7, + &lat2, &lon2, &azi2, &s12, &m12, &M12, &M21, &S12); + result += assertEquals(lat2, -30.03547, 0.5e-5); + result += assertEquals(lon2, -180.00000, 0.5e-5); + result += assertEquals(azi2, -0.00000, 0.5e-5); + result += assertEquals(s12, 20000000, 0.5); + result += assertEquals(a12, 179.96459, 0.5e-5); + result += assertEquals(m12, 54342, 0.5); + result += assertEquals(M12, -1.0045592, 0.5e-7); + result += assertEquals(M21, -0.9954339, 0.5e-7); + result += assertEquals(S12, 127516405431022.0, 0.5); + return result; +} + +int GeodSolve67() { + /* Check for InverseLine if line is slightly west of S and that s13 is + correctly set. */ + double lat2, lon2, azi2; + struct geod_geodesic g; + struct geod_geodesicline l; + int result = 0; + unsigned flags = GEOD_LONG_UNROLL; + geod_init(&g, wgs84_a, wgs84_f); + geod_inverseline(&l, &g, -5, -0.000000000000002, -10, 180, 0); + geod_genposition(&l, flags, 2e7, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0); + result += assertEquals(lat2, 4.96445, 0.5e-5); + result += assertEquals(lon2, -180.00000, 0.5e-5); + result += assertEquals(azi2, -0.00000, 0.5e-5); + geod_genposition(&l, flags, 0.5 * l.s13, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0); + result += assertEquals(lat2, -87.52461, 0.5e-5); + result += assertEquals(lon2, -0.00000, 0.5e-5); + result += assertEquals(azi2, -180.00000, 0.5e-5); + return result; +} + +int GeodSolve71() { + /* Check that DirectLine sets s13. */ + double lat2, lon2, azi2; + struct geod_geodesic g; + struct geod_geodesicline l; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_directline(&l, &g, 1, 2, 45, 1e7, 0); + geod_position(&l, 0.5 * l.s13, &lat2, &lon2, &azi2); + result += assertEquals(lat2, 30.92625, 0.5e-5); + result += assertEquals(lon2, 37.54640, 0.5e-5); + result += assertEquals(azi2, 55.43104, 0.5e-5); + return result; +} + +int GeodSolve73() { + /* Check for backwards from the pole bug reported by Anon on 2016-02-13. + * This only affected the Java implementation. It was introduced in Java + * version 1.44 and fixed in 1.46-SNAPSHOT on 2016-01-17. */ + double lat2, lon2, azi2; + struct geod_geodesic g; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + geod_direct(&g, 90, 10, 180, -1e6, + &lat2, &lon2, &azi2); + result += assertEquals(lat2, 81.04623, 0.5e-5); + result += assertEquals(lon2, -170, 0.5e-5); + result += assertEquals(azi2, 0, 0.5e-5); + return result; +} + +void planimeter(const struct geod_geodesic* g, double points[][2], int N, + double* perimeter, double* area) { + struct geod_polygon p; + int i; + geod_polygon_init(&p, 0); + for (i = 0; i < N; ++i) + geod_polygon_addpoint(g, &p, points[i][0], points[i][1]); + geod_polygon_compute(g, &p, 0, 1, area, perimeter); +} + +void polylength(const struct geod_geodesic* g, double points[][2], int N, + double* perimeter) { + struct geod_polygon p; + int i; + geod_polygon_init(&p, 1); + for (i = 0; i < N; ++i) + geod_polygon_addpoint(g, &p, points[i][0], points[i][1]); + geod_polygon_compute(g, &p, 0, 1, 0, perimeter); +} + +int Planimeter0() { + /* Check fix for pole-encircling bug found 2011-03-16 */ + double pa[4][2] = {{89, 0}, {89, 90}, {89, 180}, {89, 270}}; + double pb[4][2] = {{-89, 0}, {-89, 90}, {-89, 180}, {-89, 270}}; + double pc[4][2] = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}}; + double pd[3][2] = {{90, 0}, {0, 0}, {0, 90}}; + struct geod_geodesic g; + double perimeter, area; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + + planimeter(&g, pa, 4, &perimeter, &area); + result += assertEquals(perimeter, 631819.8745, 1e-4); + result += assertEquals(area, 24952305678.0, 1); + + planimeter(&g, pb, 4, &perimeter, &area); + result += assertEquals(perimeter, 631819.8745, 1e-4); + result += assertEquals(area, -24952305678.0, 1); + + planimeter(&g, pc, 4, &perimeter, &area); + result += assertEquals(perimeter, 627598.2731, 1e-4); + result += assertEquals(area, 24619419146.0, 1); + + planimeter(&g, pd, 3, &perimeter, &area); + result += assertEquals(perimeter, 30022685, 1); + result += assertEquals(area, 63758202715511.0, 1); + + polylength(&g, pd, 3, &perimeter); + result += assertEquals(perimeter, 20020719, 1); + + return result; +} + +int Planimeter5() { + /* Check fix for Planimeter pole crossing bug found 2011-06-24 */ + double points[3][2] = {{89, 0.1}, {89, 90.1}, {89, -179.9}}; + struct geod_geodesic g; + double perimeter, area; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + planimeter(&g, points, 3, &perimeter, &area); + result += assertEquals(perimeter, 539297, 1); + result += assertEquals(area, 12476152838.5, 1); + return result; +} + +int Planimeter6() { + /* Check fix for Planimeter lon12 rounding bug found 2012-12-03 */ + double pa[3][2] = {{9, -0.00000000000001}, {9, 180}, {9, 0}}; + double pb[3][2] = {{9, 0.00000000000001}, {9, 0}, {9, 180}}; + double pc[3][2] = {{9, 0.00000000000001}, {9, 180}, {9, 0}}; + double pd[3][2] = {{9, -0.00000000000001}, {9, 0}, {9, 180}}; + struct geod_geodesic g; + double perimeter, area; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + + planimeter(&g, pa, 3, &perimeter, &area); + result += assertEquals(perimeter, 36026861, 1); + result += assertEquals(area, 0, 1); + planimeter(&g, pb, 3, &perimeter, &area); + result += assertEquals(perimeter, 36026861, 1); + result += assertEquals(area, 0, 1); + planimeter(&g, pc, 3, &perimeter, &area); + result += assertEquals(perimeter, 36026861, 1); + result += assertEquals(area, 0, 1); + planimeter(&g, pd, 3, &perimeter, &area); + result += assertEquals(perimeter, 36026861, 1); + result += assertEquals(area, 0, 1); + return result; +} + +int Planimeter12() { + /* Area of arctic circle (not really -- adjunct to rhumb-area test) */ + double points[2][2] = {{66.562222222, 0}, {66.562222222, 180}}; + struct geod_geodesic g; + double perimeter, area; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + planimeter(&g, points, 2, &perimeter, &area); + result += assertEquals(perimeter, 10465729, 1); + result += assertEquals(area, 0, 1); + return result; +} + +int Planimeter13() { + /* Check encircling pole twice */ + double points[6][2] = {{89,-360}, {89,-240}, {89,-120}, + {89,0}, {89,120}, {89,240}}; + struct geod_geodesic g; + double perimeter, area; + int result = 0; + geod_init(&g, wgs84_a, wgs84_f); + planimeter(&g, points, 6, &perimeter, &area); + result += assertEquals(perimeter, 1160741, 1); + result += assertEquals(area, 32415230256.0, 1); + return result; +} + +int main() { + int n = 0, i; + if ((i = testinverse())) {++n; printf("testinverse fail: %d\n", i);} + if ((i = testdirect())) {++n; printf("testdirect fail: %d\n", i);} + if ((i = testarcdirect())) {++n; printf("testarcdirect fail: %d\n", i);} + if ((i = GeodSolve0())) {++n; printf("GeodSolve0 fail: %d\n", i);} + if ((i = GeodSolve1())) {++n; printf("GeodSolve1 fail: %d\n", i);} + if ((i = GeodSolve2())) {++n; printf("GeodSolve2 fail: %d\n", i);} + if ((i = GeodSolve4())) {++n; printf("GeodSolve4 fail: %d\n", i);} + if ((i = GeodSolve5())) {++n; printf("GeodSolve5 fail: %d\n", i);} + if ((i = GeodSolve6())) {++n; printf("GeodSolve6 fail: %d\n", i);} + if ((i = GeodSolve9())) {++n; printf("GeodSolve9 fail: %d\n", i);} + if ((i = GeodSolve10())) {++n; printf("GeodSolve10 fail: %d\n", i);} + if ((i = GeodSolve11())) {++n; printf("GeodSolve11 fail: %d\n", i);} + if ((i = GeodSolve12())) {++n; printf("GeodSolve12 fail: %d\n", i);} + if ((i = GeodSolve14())) {++n; printf("GeodSolve14 fail: %d\n", i);} + if ((i = GeodSolve15())) {++n; printf("GeodSolve15 fail: %d\n", i);} + if ((i = GeodSolve17())) {++n; printf("GeodSolve17 fail: %d\n", i);} + if ((i = GeodSolve26())) {++n; printf("GeodSolve26 fail: %d\n", i);} + if ((i = GeodSolve28())) {++n; printf("GeodSolve28 fail: %d\n", i);} + if ((i = GeodSolve33())) {++n; printf("GeodSolve33 fail: %d\n", i);} + if ((i = GeodSolve55())) {++n; printf("GeodSolve55 fail: %d\n", i);} + if ((i = GeodSolve59())) {++n; printf("GeodSolve59 fail: %d\n", i);} + if ((i = GeodSolve61())) {++n; printf("GeodSolve61 fail: %d\n", i);} + if ((i = GeodSolve65())) {++n; printf("GeodSolve65 fail: %d\n", i);} + if ((i = GeodSolve67())) {++n; printf("GeodSolve67 fail: %d\n", i);} + if ((i = GeodSolve71())) {++n; printf("GeodSolve71 fail: %d\n", i);} + if ((i = GeodSolve73())) {++n; printf("GeodSolve73 fail: %d\n", i);} + if ((i = Planimeter0())) {++n; printf("Planimeter0 fail: %d\n", i);} + if ((i = Planimeter5())) {++n; printf("Planimeter5 fail: %d\n", i);} + if ((i = Planimeter6())) {++n; printf("Planimeter6 fail: %d\n", i);} + if ((i = Planimeter12())) {++n; printf("Planimeter12 fail: %d\n", i);} + if ((i = Planimeter13())) {++n; printf("Planimeter13 fail: %d\n", i);} + return n; +} + +/** @endcond */ diff --git a/proj4/src/hypot.c b/proj4/src/hypot.c new file mode 100644 index 000000000000..822c4595ff27 --- /dev/null +++ b/proj4/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/proj4/src/jniproj.c b/proj4/src/jniproj.c new file mode 100644 index 000000000000..6094d57724cf --- /dev/null +++ b/proj4/src/jniproj.c @@ -0,0 +1,476 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Java/JNI wrappers for PROJ.4 API. + * Author: Antonello Andrea + * Martin Desruisseaux + * + ****************************************************************************** + * Copyright (c) 2005, Antonello Andrea + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +/*! + * \file jniproj.c + * + * \brief + * Functions used by the Java Native Interface (JNI) wrappers of Proj.4 + * + * + * \author Antonello Andrea + * \date Wed Oct 20 23:10:24 CEST 2004 + * + * \author Martin Desruisseaux + * \date August 2011 + */ + +#include "proj_config.h" + +#ifdef JNI_ENABLED + +#include +#include +#include "projects.h" +#include "org_proj4_PJ.h" +#include + +#define PJ_FIELD_NAME "ptr" +#define PJ_FIELD_TYPE "J" +#define PJ_MAX_DIMENSION 100 +/* The PJ_MAX_DIMENSION value appears also in quoted strings. + Please perform a search-and-replace if this value is changed. */ + +/*! + * \brief + * Internal method returning the address of the PJ structure wrapped by the given Java object. + * This function looks for a field named "ptr" and of type "long" (Java signature "J") in the + * given object. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The address of the PJ structure, or NULL if the operation fails (for example + * because the "ptr" field was not found). + */ +PJ *getPJ(JNIEnv *env, jobject object) +{ + jfieldID id = (*env)->GetFieldID(env, (*env)->GetObjectClass(env, object), PJ_FIELD_NAME, PJ_FIELD_TYPE); + return (id) ? (PJ*) (*env)->GetLongField(env, object, id) : NULL; +} + +/*! + * \brief + * Internal method returning the java.lang.Double.NaN constant value. + * Efficiency is no a high concern for this particular method, because it + * is used mostly when the user wrongly attempt to use a disposed PJ object. + * + * \param env - The JNI environment. + * \return The java.lang.Double.NaN constant value. + */ +jdouble javaNaN(JNIEnv *env) +{ + jclass c = (*env)->FindClass(env, "java/lang/Double"); + if (c) { // Should never be NULL, but let be paranoiac. + jfieldID id = (*env)->GetStaticFieldID(env, c, "NaN", "D"); + if (id) { // Should never be NULL, but let be paranoiac. + return (*env)->GetStaticDoubleField(env, c, id); + } + } + return 0.0; // Should never happen. +} + +/*! + * \brief + * Returns the Proj4 release number. + * + * \param env - The JNI environment. + * \param class - The class from which this method has been invoked. + * \return The Proj4 release number, or NULL. + */ +JNIEXPORT jstring JNICALL Java_org_proj4_PJ_getVersion + (JNIEnv *env, jclass class) +{ + const char *desc = pj_get_release(); + return (desc) ? (*env)->NewStringUTF(env, desc) : NULL; +} + +/*! + * \brief + * Allocates a new PJ structure from a definition string. + * + * \param env - The JNI environment. + * \param class - The class from which this method has been invoked. + * \param definition - The string definition to be given to Proj4. + * \return The address of the new PJ structure, or 0 in case of failure. + */ +JNIEXPORT jlong JNICALL Java_org_proj4_PJ_allocatePJ + (JNIEnv *env, jclass class, jstring definition) +{ + const char *def_utf = (*env)->GetStringUTFChars(env, definition, NULL); + if (!def_utf) return 0; /* OutOfMemoryError already thrown. */ + PJ *pj = pj_init_plus(def_utf); + (*env)->ReleaseStringUTFChars(env, definition, def_utf); + return (jlong) pj; +} + +/*! + * \brief + * Allocates a new geographic PJ structure from an existing one. + * + * \param env - The JNI environment. + * \param class - The class from which this method has been invoked. + * \param projected - The PJ object from which to derive a new one. + * \return The address of the new PJ structure, or 0 in case of failure. + */ +JNIEXPORT jlong JNICALL Java_org_proj4_PJ_allocateGeoPJ + (JNIEnv *env, jclass class, jobject projected) +{ + PJ *pj = getPJ(env, projected); + return (pj) ? (jlong) pj_latlong_from_proj(pj) : 0; +} + +/*! + * \brief + * Returns the definition string. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The definition string. + */ +JNIEXPORT jstring JNICALL Java_org_proj4_PJ_getDefinition + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + if (pj) { + char *desc = pj_get_def(pj, 0); + if (desc) { + jstring str = (*env)->NewStringUTF(env, desc); + pj_dalloc(desc); + return str; + } + } + return NULL; +} + +/*! + * \brief + * Returns the description associated to the PJ structure. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The description associated to the PJ structure. + */ +JNIEXPORT jstring JNICALL Java_org_proj4_PJ_toString + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + if (pj) { + const char *desc = pj->descr; + if (desc) { + return (*env)->NewStringUTF(env, desc); + } + } + return NULL; +} + +/*! + * \brief + * Returns the CRS type as one of the PJ.Type enum: GEOGRAPHIC, GEOCENTRIC or PROJECTED. + * This function should never return NULL, unless class or fields have been renamed in + * such a way that we can not find anymore the expected enum values. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The CRS type as one of the PJ.Type enum. + */ +JNIEXPORT jobject JNICALL Java_org_proj4_PJ_getType + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + if (pj) { + const char *type; + if (pj_is_latlong(pj)) { + type = "GEOGRAPHIC"; + } else if (pj_is_geocent(pj)) { + type = "GEOCENTRIC"; + } else { + type = "PROJECTED"; + } + jclass c = (*env)->FindClass(env, "org/proj4/PJ$Type"); + if (c) { + jfieldID id = (*env)->GetStaticFieldID(env, c, type, "Lorg/proj4/PJ$Type;"); + if (id) { + return (*env)->GetStaticObjectField(env, c, id); + } + } + } + return NULL; +} + +/*! + * \brief + * Returns the semi-major axis length. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The semi-major axis length. + */ +JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getSemiMajorAxis + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + return pj ? pj->a_orig : javaNaN(env); +} + +/*! + * \brief + * Computes the semi-minor axis length from the semi-major axis length and the eccentricity + * squared. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The semi-minor axis length. + */ +JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getSemiMinorAxis + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + if (!pj) return javaNaN(env); + double a = pj->a_orig; + return sqrt(a*a * (1.0 - pj->es_orig)); +} + +/*! + * \brief + * Returns the eccentricity squared. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The eccentricity. + */ +JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getEccentricitySquared + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + return pj ? pj->es_orig : javaNaN(env); +} + +/*! + * \brief + * Returns an array of character indicating the direction of each axis. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The axis directions. + */ +JNIEXPORT jcharArray JNICALL Java_org_proj4_PJ_getAxisDirections + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + if (pj) { + int length = strlen(pj->axis); + jcharArray array = (*env)->NewCharArray(env, length); + if (array) { + jchar* axis = (*env)->GetCharArrayElements(env, array, NULL); + if (axis) { + /* Don't use memcp because the type may not be the same. */ + int i; + for (i=0; iaxis[i]; + } + (*env)->ReleaseCharArrayElements(env, array, axis, 0); + } + return array; + } + } + return NULL; +} + +/*! + * \brief + * Longitude of the prime meridian measured from the Greenwich meridian, positive eastward. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The prime meridian longitude, in degrees. + */ +JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getGreenwichLongitude + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + return (pj) ? (pj->from_greenwich)*(180/M_PI) : javaNaN(env); +} + +/*! + * \brief + * Returns the conversion factor from linear units to metres. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \param vertical - JNI_FALSE for horizontal axes, or JNI_TRUE for the vertical axis. + * \return The conversion factor to metres. + */ +JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getLinearUnitToMetre + (JNIEnv *env, jobject object, jboolean vertical) +{ + PJ *pj = getPJ(env, object); + if (pj) { + return (vertical) ? pj->vto_meter : pj->to_meter; + } + return javaNaN(env); +} + +/*! + * \brief + * Converts input values from degrees to radians before coordinate operation, or the output + * values from radians to degrees after the coordinate operation. + * + * \param pj - The Proj.4 PJ structure. + * \param data - The coordinate array to transform. + * \param numPts - Number of points to transform. + * \param dimension - Dimension of points in the coordinate array. + * \param factor - The scale factor to apply: M_PI/180 for inputs or 180/M_PI for outputs. + */ +void convertAngularOrdinates(PJ *pj, double* data, jint numPts, int dimension, double factor) { + int dimToSkip; + if (pj_is_latlong(pj)) { + /* Convert only the 2 first ordinates and skip all the other dimensions. */ + dimToSkip = dimension - 2; + } else if (pj_is_geocent(pj)) { + /* Convert only the 3 first ordinates and skip all the other dimensions. */ + dimToSkip = dimension - 3; + } else { + /* Not a geographic or geocentric CRS: nothing to convert. */ + return; + } + double *stop = data + dimension*numPts; + if (dimToSkip > 0) { + while (data != stop) { + (*data++) *= factor; + (*data++) *= factor; + data += dimToSkip; + } + } else { + while (data != stop) { + (*data++) *= factor; + } + } +} + +/*! + * \brief + * Transforms in-place the coordinates in the given array. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \param target - The target CRS. + * \param dimension - The dimension of each coordinate value. Must be equals or greater than 2. + * \param coordinates - The coordinates to transform, as a sequence of (x,y,,...) tuples. + * \param offset - Offset of the first coordinate in the given array. + * \param numPts - Number of points to transform. + */ +JNIEXPORT void JNICALL Java_org_proj4_PJ_transform + (JNIEnv *env, jobject object, jobject target, jint dimension, jdoubleArray coordinates, jint offset, jint numPts) +{ + if (!target || !coordinates) { + jclass c = (*env)->FindClass(env, "java/lang/NullPointerException"); + if (c) (*env)->ThrowNew(env, c, "The target CRS and the coordinates array can not be null."); + return; + } + if (dimension < 2 || dimension > PJ_MAX_DIMENSION) { /* Arbitrary upper value for catching potential misuse. */ + jclass c = (*env)->FindClass(env, "java/lang/IllegalArgumentException"); + if (c) (*env)->ThrowNew(env, c, "Illegal dimension. Must be in the [2-100] range."); + return; + } + if ((offset < 0) || (numPts < 0) || (offset + dimension*numPts) > (*env)->GetArrayLength(env, coordinates)) { + jclass c = (*env)->FindClass(env, "java/lang/ArrayIndexOutOfBoundsException"); + if (c) (*env)->ThrowNew(env, c, "Illegal offset or illegal number of points."); + return; + } + PJ *src_pj = getPJ(env, object); + PJ *dst_pj = getPJ(env, target); + if (src_pj && dst_pj) { + /* Using GetPrimitiveArrayCritical/ReleasePrimitiveArrayCritical rather than + GetDoubleArrayElements/ReleaseDoubleArrayElements increase the chances that + the JVM returns direct reference to its internal array without copying data. + However we must promise to run the "critical" code fast, to not make any + system call that may wait for the JVM and to not invoke any other JNI method. */ + double *data = (*env)->GetPrimitiveArrayCritical(env, coordinates, NULL); + if (data) { + double *x = data + offset; + double *y = x + 1; + double *z = (dimension >= 3) ? y+1 : NULL; + convertAngularOrdinates(src_pj, x, numPts, dimension, M_PI/180); + int err = pj_transform(src_pj, dst_pj, numPts, dimension, x, y, z); + convertAngularOrdinates(dst_pj, x, numPts, dimension, 180/M_PI); + (*env)->ReleasePrimitiveArrayCritical(env, coordinates, data, 0); + if (err) { + jclass c = (*env)->FindClass(env, "org/proj4/PJException"); + if (c) (*env)->ThrowNew(env, c, pj_strerrno(err)); + } + } + } +} + +/*! + * \brief + * Returns a description of the last error that occurred, or NULL if none. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + * \return The last error, or NULL. + */ +JNIEXPORT jstring JNICALL Java_org_proj4_PJ_getLastError + (JNIEnv *env, jobject object) +{ + PJ *pj = getPJ(env, object); + if (pj) { + int err = pj_ctx_get_errno(pj->ctx); + if (err) { + return (*env)->NewStringUTF(env, pj_strerrno(err)); + } + } + return NULL; +} + +/*! + * \brief + * Deallocate the PJ structure. This method is invoked by the garbage collector exactly once. + * This method will also set the Java "ptr" final field to 0 as a safety. In theory we are not + * supposed to change the value of a final field. But no Java code should use this field, and + * the PJ object is being garbage collected anyway. We set the field to 0 as a safety in case + * some user invoked the finalize() method explicitely despite our warning in the Javadoc to + * never do such thing. + * + * \param env - The JNI environment. + * \param object - The Java object wrapping the PJ structure (not allowed to be NULL). + */ +JNIEXPORT void JNICALL Java_org_proj4_PJ_finalize + (JNIEnv *env, jobject object) +{ + jfieldID id = (*env)->GetFieldID(env, (*env)->GetObjectClass(env, object), PJ_FIELD_NAME, PJ_FIELD_TYPE); + if (id) { + PJ *pj = (PJ*) (*env)->GetLongField(env, object, id); + if (pj) { + (*env)->SetLongField(env, object, id, (jlong) 0); + pj_free(pj); + } + } +} + +#endif diff --git a/proj4/src/lib_proj.cmake b/proj4/src/lib_proj.cmake new file mode 100644 index 000000000000..a90cdac9e53b --- /dev/null +++ b/proj4/src/lib_proj.cmake @@ -0,0 +1,340 @@ +############################################## +### SWITCH BETWEEN STATIC OR SHARED LIBRARY### +############################################## +colormsg(_HIBLUE_ "Configuring proj library:") +message(STATUS "") + +# default config, shared on unix and static on Windows +if(UNIX) + set(BUILD_LIBPROJ_SHARED_DEFAULT ON ) +endif(UNIX) +if( WIN32) + set(BUILD_LIBPROJ_SHARED_DEFAULT OFF) +endif(WIN32) +option(BUILD_LIBPROJ_SHARED "Build libproj library shared." ${BUILD_LIBPROJ_SHARED_DEFAULT}) +if(BUILD_LIBPROJ_SHARED) + set(PROJ_LIBRARY_TYPE SHARED) +else(BUILD_LIBPROJ_SHARED) + set(PROJ_LIBRARY_TYPE STATIC) +endif(BUILD_LIBPROJ_SHARED) + + +option(USE_THREAD "Build libproj with thread/mutex support " ON) +if(NOT USE_THREAD) + add_definitions( -DMUTEX_stub) +endif(NOT USE_THREAD) +find_package(Threads QUIET) +if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_WIN32_THREADS_INIT ) + add_definitions( -DMUTEX_win32) +endif(USE_THREAD AND Threads_FOUND AND CMAKE_USE_WIN32_THREADS_INIT ) +if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT ) + add_definitions( -DMUTEX_pthread) +endif(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT ) +if(USE_THREAD AND NOT Threads_FOUND) + message(FATAL_ERROR "No thread library found and thread/mutex support is required by USE_THREAD option") +endif(USE_THREAD AND NOT Threads_FOUND) + + +############################################## +### librairie source list and include_list ### +############################################## +SET(SRC_LIBPROJ_PJ + nad_init.c + PJ_aea.c + PJ_aeqd.c + PJ_airy.c + PJ_aitoff.c + PJ_august.c + PJ_bacon.c + PJ_bipc.c + PJ_boggs.c + PJ_bonne.c + PJ_calcofi.c + PJ_cass.c + PJ_cc.c + PJ_cea.c + PJ_chamb.c + PJ_collg.c + PJ_comill.c + PJ_crast.c + PJ_denoy.c + PJ_eck1.c + PJ_eck2.c + PJ_eck3.c + PJ_eck4.c + PJ_eck5.c + PJ_eqc.c + PJ_eqdc.c + PJ_fahey.c + PJ_fouc_s.c + PJ_gall.c + PJ_geos.c + PJ_gins8.c + PJ_gnom.c + PJ_gn_sinu.c + PJ_goode.c + PJ_gstmerc.c + PJ_hammer.c + PJ_hatano.c + PJ_igh.c + PJ_isea.c + PJ_imw_p.c + PJ_krovak.c + PJ_labrd.c + PJ_laea.c + PJ_lagrng.c + PJ_larr.c + PJ_lask.c + PJ_lcca.c + PJ_lcc.c + PJ_loxim.c + PJ_lsat.c + PJ_misrsom.c + PJ_mbt_fps.c + PJ_mbtfpp.c + PJ_mbtfpq.c + PJ_merc.c + PJ_mill.c + PJ_mod_ster.c + PJ_moll.c + PJ_natearth.c + PJ_natearth2.c + PJ_nell.c + PJ_nell_h.c + PJ_nocol.c + PJ_nsper.c + PJ_nzmg.c + PJ_ob_tran.c + PJ_ocea.c + PJ_oea.c + PJ_omerc.c + PJ_ortho.c + PJ_patterson.c + PJ_poly.c + PJ_putp2.c + PJ_putp3.c + PJ_putp4p.c + PJ_putp5.c + PJ_putp6.c + PJ_qsc.c + PJ_robin.c + PJ_rpoly.c + PJ_sch.c + PJ_sconics.c + PJ_somerc.c + PJ_sterea.c + PJ_stere.c + PJ_sts.c + PJ_tcc.c + PJ_tcea.c + PJ_times.c + PJ_tmerc.c + PJ_tpeqd.c + PJ_urm5.c + PJ_urmfps.c + PJ_vandg.c + PJ_vandg2.c + PJ_vandg4.c + PJ_wag2.c + PJ_wag3.c + PJ_wag7.c + PJ_wink1.c + PJ_wink2.c + proj_etmerc.c +) + +SET(SRC_LIBPROJ_CORE + aasincos.c + adjlon.c + bch2bps.c + bchgen.c + biveval.c + dmstor.c + emess.c + emess.h + geocent.c + geocent.h + geodesic.c + mk_cheby.c + nad_cvt.c + nad_init.c + nad_intr.c + pj_apply_gridshift.c + pj_apply_vgridshift.c + pj_auth.c + pj_ctx.c + pj_fileapi.c + pj_datum_set.c + pj_datums.c + pj_deriv.c + pj_ell_set.c + pj_ellps.c + pj_errno.c + pj_factors.c + pj_fwd.c + pj_fwd3d.c + pj_gauss.c + pj_gc_reader.c + pj_generic_selftest.c + pj_geocent.c + pj_gridcatalog.c + pj_gridinfo.c + pj_gridlist.c + PJ_healpix.c + pj_init.c + pj_initcache.c + pj_inv.c + pj_inv3d.c + pj_latlong.c + pj_list.c + pj_list.h + pj_log.c + pj_malloc.c + pj_mlfn.c + pj_msfn.c + pj_mutex.c + pj_open_lib.c + pj_param.c + pj_phi2.c + pj_pr_list.c + pj_qsfn.c + pj_release.c + pj_run_selftests.c + pj_strerrno.c + pj_transform.c + pj_tsfn.c + pj_units.c + pj_utils.c + pj_zpoly1.c + proj_mdist.c + proj_rouss.c + rtodms.c + vector1.c + pj_strtod.c + ${CMAKE_CURRENT_BINARY_DIR}/proj_config.h + ) + +set(HEADERS_LIBPROJ + projects.h + proj_api.h + geodesic.h +) + +# Group source files for IDE source explorers (e.g. Visual Studio) +source_group("Header Files" FILES ${HEADERS_LIBPROJ}) +source_group("Source Files\\Core" FILES ${SRC_LIBPROJ_CORE}) +source_group("Source Files\\PJ" FILES ${SRC_LIBPROJ_PJ}) +include_directories( ${CMAKE_CURRENT_BINARY_DIR}) +source_group("CMake Files" FILES CMakeLists.txt) + + +# Embed PROJ_LIB data files location +add_definitions(-DPROJ_LIB="${CMAKE_INSTALL_PREFIX}/${DATADIR}") + +################################################# +## java wrapping with jni +################################################# +option(JNI_SUPPORT "Build support of java/jni wrapping for proj library" OFF) +find_package(JNI QUIET) +if(JNI_SUPPORT AND NOT JNI_FOUND) + message(FATAL_ERROR "jni support is required but jni is not found") +endif(JNI_SUPPORT AND NOT JNI_FOUND) +boost_report_value(JNI_SUPPORT) +if(JNI_SUPPORT) + set(SRC_LIBPROJ_CORE ${SRC_LIBPROJ_CORE} + jniproj.c ) + set(HEADERS_LIBPROJ ${HEADERS_LIBPROJ} + org_proj4_PJ.h + org_proj4_Projections.h) + source_group("Source Files\\JNI" FILES ${SRC_LIBPROJ_JNI}) + add_definitions(-DJNI_ENABLED) + include_directories( ${JNI_INCLUDE_DIRS}) + boost_report_value(JNI_INCLUDE_DIRS) +endif(JNI_SUPPORT) + +################################################# +## targets: libproj and proj_config.h +################################################# +set(ALL_LIBPROJ_SOURCES ${SRC_LIBPROJ_PJ} ${SRC_LIBPROJ_CORE}) +set(ALL_LIBPROJ_HEADERS ${HEADERS_LIBPROJ} ) +if(WIN32 AND BUILD_LIBPROJ_SHARED) + set(ALL_LIBPROJ_SOURCES ${ALL_LIBPROJ_SOURCES} proj.def ) +endif(WIN32 AND BUILD_LIBPROJ_SHARED) + +# Core targets configuration +string(TOLOWER "${PROJECT_INTERN_NAME}" PROJECTNAMEL) +set(PROJ_CORE_TARGET ${PROJECTNAMEL}) +proj_target_output_name(${PROJ_CORE_TARGET} PROJ_CORE_TARGET_OUTPUT_NAME) + +add_library( ${PROJ_CORE_TARGET} + ${PROJ_LIBRARY_TYPE} + ${ALL_LIBPROJ_SOURCES} + ${ALL_LIBPROJ_HEADERS} + ${PROJ_RESOURCES} ) + + +if(WIN32) + set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + VERSION "${${PROJECT_INTERN_NAME}_BUILD_VERSION}" + OUTPUT_NAME "${PROJ_CORE_TARGET_OUTPUT_NAME}" + CLEAN_DIRECT_OUTPUT 1) +elseif(BUILD_FRAMEWORKS_AND_BUNDLE) + set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + VERSION "${${PROJECT_INTERN_NAME}_BUILD_VERSION}" + INSTALL_NAME_DIR ${PROJ_INSTALL_NAME_DIR} + CLEAN_DIRECT_OUTPUT 1) +else() + set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + VERSION "${${PROJECT_INTERN_NAME}_BUILD_VERSION}" + SOVERSION "${${PROJECT_INTERN_NAME}_API_VERSION}" + CLEAN_DIRECT_OUTPUT 1) +endif() + +set_target_properties(${PROJ_CORE_TARGET} + PROPERTIES + LINKER_LANGUAGE C) + +############################################## +# Link properties +############################################## +set(PROJ_LIBRARIES ${PROJ_CORE_TARGET} ) +if(UNIX) + find_library(M_LIB m) + if(M_LIB) + TARGET_LINK_LIBRARIES(${PROJ_CORE_TARGET} -lm) + endif() +endif(UNIX) +if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) + TARGET_LINK_LIBRARIES(${PROJ_CORE_TARGET} ${CMAKE_THREAD_LIBS_INIT}) +endif(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) + + +############################################## +# install +############################################## +install(TARGETS ${PROJ_CORE_TARGET} + EXPORT targets + RUNTIME DESTINATION ${BINDIR} + LIBRARY DESTINATION ${LIBDIR} + ARCHIVE DESTINATION ${LIBDIR} + FRAMEWORK DESTINATION ${FRAMEWORKDIR}) + +if(NOT BUILD_FRAMEWORKS_AND_BUNDLE) + install(FILES ${ALL_LIBPROJ_HEADERS} + DESTINATION ${INCLUDEDIR}) +endif(NOT BUILD_FRAMEWORKS_AND_BUNDLE) + +############################################## +# Core configuration summary +############################################## +boost_report_value(PROJ_CORE_TARGET) +boost_report_value(PROJ_CORE_TARGET_OUTPUT_NAME) +boost_report_value(PROJ_LIBRARY_TYPE) +boost_report_value(PROJ_LIBRARIES) + + + + diff --git a/proj4/src/makefile.vc b/proj4/src/makefile.vc new file mode 100644 index 000000000000..6f63bc61e368 --- /dev/null +++ b/proj4/src/makefile.vc @@ -0,0 +1,149 @@ +# +# makefile.vc - builds PROJ.4 library with Visual C++ +# +!INCLUDE ..\nmake.opt + +azimuthal = \ + PJ_aeqd.obj PJ_gnom.obj PJ_laea.obj PJ_mod_ster.obj \ + PJ_nsper.obj PJ_nzmg.obj PJ_ortho.obj PJ_stere.obj PJ_sterea.obj \ + proj_rouss.obj + +conic = \ + PJ_aea.obj PJ_bipc.obj PJ_bonne.obj PJ_eqdc.obj \ + PJ_imw_p.obj PJ_lcc.obj PJ_poly.obj \ + PJ_rpoly.obj PJ_sconics.obj PJ_lcca.obj + +cylinder = \ + PJ_cass.obj PJ_cc.obj PJ_cea.obj PJ_eqc.obj \ + PJ_gall.obj PJ_labrd.obj PJ_lsat.obj PJ_misrsom.obj PJ_merc.obj \ + PJ_mill.obj PJ_ocea.obj PJ_omerc.obj PJ_patterson.obj PJ_somerc.obj \ + PJ_tcc.obj PJ_tcea.obj PJ_tmerc.obj PJ_geos.obj \ + PJ_gstmerc.obj proj_etmerc.obj PJ_comill.obj + +misc = \ + PJ_airy.obj PJ_aitoff.obj PJ_august.obj PJ_bacon.obj \ + PJ_chamb.obj PJ_hammer.obj PJ_lagrng.obj PJ_larr.obj \ + PJ_lask.obj PJ_nocol.obj PJ_ob_tran.obj PJ_oea.obj \ + PJ_sch.obj PJ_tpeqd.obj PJ_vandg.obj PJ_vandg2.obj \ + PJ_vandg4.obj PJ_wag7.obj pj_latlong.obj PJ_krovak.obj \ + pj_geocent.obj PJ_healpix.obj PJ_qsc.obj + +pseudo = \ + PJ_boggs.obj PJ_collg.obj PJ_crast.obj PJ_denoy.obj \ + PJ_eck1.obj PJ_eck2.obj PJ_eck3.obj PJ_eck4.obj \ + PJ_eck5.obj PJ_fahey.obj PJ_fouc_s.obj PJ_gins8.obj \ + PJ_gn_sinu.obj PJ_goode.obj PJ_igh.obj PJ_hatano.obj PJ_loxim.obj \ + PJ_mbt_fps.obj PJ_mbtfpp.obj PJ_mbtfpq.obj PJ_moll.obj \ + PJ_nell.obj PJ_nell_h.obj PJ_putp2.obj PJ_putp3.obj \ + PJ_putp4p.obj PJ_putp5.obj PJ_putp6.obj PJ_robin.obj \ + PJ_sts.obj PJ_urm5.obj PJ_urmfps.obj PJ_wag2.obj \ + PJ_wag3.obj PJ_wink1.obj PJ_wink2.obj PJ_isea.obj \ + PJ_calcofi.obj PJ_natearth.obj PJ_natearth2.obj PJ_times.obj + +support = \ + aasincos.obj adjlon.obj bch2bps.obj bchgen.obj pj_gauss.obj \ + biveval.obj dmstor.obj mk_cheby.obj pj_auth.obj \ + pj_deriv.obj pj_ell_set.obj pj_ellps.obj pj_errno.obj \ + pj_factors.obj pj_fwd.obj pj_init.obj pj_inv.obj \ + pj_fwd3d.obj pj_inv3d.obj \ + pj_list.obj pj_malloc.obj pj_mlfn.obj pj_msfn.obj \ + pj_open_lib.obj pj_param.obj pj_phi2.obj pj_pr_list.obj \ + pj_qsfn.obj pj_strerrno.obj pj_tsfn.obj pj_units.obj \ + pj_zpoly1.obj rtodms.obj vector1.obj pj_release.obj \ + geocent.obj pj_transform.obj pj_datum_set.obj pj_datums.obj \ + pj_apply_gridshift.obj pj_gc_reader.obj pj_gridcatalog.obj \ + nad_cvt.obj nad_init.obj nad_intr.obj \ + pj_utils.obj pj_gridlist.obj pj_gridinfo.obj \ + proj_mdist.obj pj_mutex.obj pj_initcache.obj \ + pj_ctx.obj pj_fileapi.obj pj_log.obj pj_apply_vgridshift.obj \ + pj_strtod.obj pj_run_selftests.obj pj_generic_selftest.obj + +geodesic = geodesic.obj +LIBOBJ = $(support) $(pseudo) $(azimuthal) $(conic) $(cylinder) $(misc) \ + $(geodesic) +PROJEXE_OBJ = proj.obj gen_cheb.obj p_series.obj emess.obj +CS2CSEXE_OBJ = cs2cs.obj gen_cheb.obj p_series.obj emess.obj +GEODEXE_OBJ = geod.obj geod_set.obj geod_interface.obj emess.obj +MULTISTRESSTEST_OBJ = multistresstest.obj +PROJ_DLL = proj$(VERSION).dll +PROJ_EXE = proj.exe +CS2CS_EXE = cs2cs.exe +GEOD_EXE = geod.exe +NAD2BIN_EXE = nad2bin.exe +MULTISTRESSTEST_EXE = multistresstest.exe + +CFLAGS = /nologo -I. -DPROJ_LIB=\"$(PROJ_LIB_DIR)\" \ + -DHAVE_STRERROR=1 -DHAVE_LOCALECONV=1 $(OPTFLAGS) + +default: all + +all: proj.lib $(PROJ_EXE) $(CS2CS_EXE) $(GEOD_EXE) $(NAD2BIN_EXE) + +proj.lib: $(LIBOBJ) + if exist proj.lib del proj.lib + lib /out:proj.lib $(LIBOBJ) + +$(PROJ_DLL): proj_i.lib + +proj_i.lib: $(LIBOBJ) + link /debug /dll /def:proj.def /out:$(PROJ_DLL) /implib:proj_i.lib \ + $(LIBOBJ) + if exist $(PROJ_DLL).manifest mt -manifest $(PROJ_DLL).manifest -outputresource:$(PROJ_DLL);2 + +$(PROJ_EXE): $(PROJEXE_OBJ) $(EXE_PROJ) + cl $(PROJEXE_OBJ) $(EXE_PROJ) + if exist $(PROJ_EXE).manifest mt -manifest $(PROJ_EXE).manifest -outputresource:$(PROJ_EXE);1 + +$(CS2CS_EXE): $(CS2CSEXE_OBJ) $(EXE_PROJ) + cl $(CS2CSEXE_OBJ) $(EXE_PROJ) + if exist $(CS2CS_EXE).manifest mt -manifest $(CS2CS_EXE).manifest -outputresource:$(CS2CS_EXE);1 + +$(GEOD_EXE): $(GEODEXE_OBJ) $(EXE_PROJ) + cl $(GEODEXE_OBJ) $(EXE_PROJ) + if exist $(GEOD_EXE).manifest mt -manifest $(GEOD_EXE).manifest -outputresource:$(GEOD_EXE);1 + +$(NAD2BIN_EXE): nad2bin.obj emess.obj $(EXE_PROJ) + cl nad2bin.obj emess.obj $(EXE_PROJ) + +$(MULTISTRESSTEST_EXE): $(MULTISTRESSTEST_OBJ) + cl $(MULTISTRESSTEST_OBJ) $(EXE_PROJ) + if exist $(MULTISTRESSTEST_EXE).manifest mt -manifest $(MULTISTRESSTEST_EXE).manifest -outputresource:$(MULTISTRESSTEST_EXE);1 + +nadshift: nad2bin.exe + cd ..\nad + ..\src\nad2bin.exe < conus.lla conus + ..\src\nad2bin.exe < MD.lla MD + ..\src\nad2bin.exe < TN.lla TN + ..\src\nad2bin.exe < WI.lla WI + ..\src\nad2bin.exe < WO.lla WO + ..\src\nad2bin.exe < alaska.lla alaska + ..\src\nad2bin.exe < hawaii.lla hawaii + ..\src\nad2bin.exe < prvi.lla prvi + ..\src\nad2bin.exe < stgeorge.lla stgeorge + ..\src\nad2bin.exe < stlrnc.lla stlrnc + ..\src\nad2bin.exe < stpaul.lla stpaul + ..\src\nad2bin.exe < null.lla null + cd ..\src + +clean: + del *.dll + del *.exe + del *.exp + del *.manifest + del *.lib + del *.obj + del *.pdb + +install: all + -mkdir $(INSTDIR) + -mkdir $(INSTDIR)\bin + -mkdir $(INSTDIR)\share + -mkdir $(INSTDIR)\lib + -mkdir $(INSTDIR)\include + copy *.exe $(INSTDIR)\bin + copy *.dll $(INSTDIR)\bin + copy *.lib $(INSTDIR)\lib + copy proj_api.h $(INSTDIR)\include + copy projects.h $(INSTDIR)\include + copy geodesic.h $(INSTDIR)\include + diff --git a/proj4/src/mk_cheby.c b/proj4/src/mk_cheby.c new file mode 100644 index 000000000000..32f22f1a4116 --- /dev/null +++ b/proj4/src/mk_cheby.c @@ -0,0 +1,177 @@ +#include +static void /* sum coefficients less than res */ +eval(projUV **w, int nu, int nv, double res, projUV *resid) { + int i, j; + double ab; + projUV *s; + + resid->u = resid->v = 0.; + for (i = 0; i < nu; ++i) + for (s = w[i], j = 0; j < nv; ++j, ++s) { + if ((ab = fabs(s->u)) < res) + resid->u += ab; + if ((ab = fabs(s->v)) < res) + resid->v += ab; + } +} +static Tseries * /* create power series structure */ +makeT(int nru, int nrv) { + Tseries *T; + int i; + + if ((T = (Tseries *)pj_malloc(sizeof(Tseries))) && + (T->cu = (struct PW_COEF *)pj_malloc( + sizeof(struct PW_COEF) * nru)) && + (T->cv = (struct PW_COEF *)pj_malloc( + sizeof(struct PW_COEF) * nrv))) { + for (i = 0; i < nru; ++i) + T->cu[i].c = 0; + for (i = 0; i < nrv; ++i) + T->cv[i].c = 0; + return T; + } else + return 0; +} +Tseries * +mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), + int nu, int nv, int power) { + int j, i, nru, nrv, *ncu, *ncv; + Tseries *T = NULL; + projUV **w; + double cutres; + + if (!(w = (projUV **)vector2(nu, nv, sizeof(projUV))) || + !(ncu = (int *)vector1(nu + nv, sizeof(int)))) + return 0; + ncv = ncu + nu; + if (!bchgen(a, b, nu, nv, w, func)) { + projUV *s; + double ab, *p; + + /* analyse coefficients and adjust until residual OK */ + cutres = res; + for (i = 4; i ; --i) { + eval(w, nu, nv, cutres, resid); + if (resid->u < res && resid->v < res) + break; + cutres *= 0.5; + } + if (i <= 0) /* warn of too many tries */ + resid->u = - resid->u; + /* apply cut resolution and set pointers */ + nru = nrv = 0; + for (j = 0; j < nu; ++j) { + ncu[j] = ncv[j] = 0; /* clear column maxes */ + for (s = w[j], i = 0; i < nv; ++i, ++s) { + if ((ab = fabs(s->u)) < cutres) /* < resolution ? */ + s->u = 0.; /* clear coefficient */ + else + ncu[j] = i + 1; /* update column max */ + if ((ab = fabs(s->v)) < cutres) /* same for v coef's */ + s->v = 0.; + else + ncv[j] = i + 1; + } + if (ncu[j]) nru = j + 1; /* update row max */ + if (ncv[j]) nrv = j + 1; + } + if (power) { /* convert to bivariate power series */ + if (!bch2bps(a, b, w, nu, nv)) + goto error; + /* possible change in some row counts, so readjust */ + nru = nrv = 0; + for (j = 0; j < nu; ++j) { + ncu[j] = ncv[j] = 0; /* clear column maxes */ + for (s = w[j], i = 0; i < nv; ++i, ++s) { + if (s->u) + ncu[j] = i + 1; /* update column max */ + if (s->v) + ncv[j] = i + 1; + } + if (ncu[j]) nru = j + 1; /* update row max */ + if (ncv[j]) nrv = j + 1; + } + 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]) != 0) + { + if ((p = T->cu[i].c = + (double *)pj_malloc(sizeof(double) * ncu[i]))) + for (j = 0; j < ncu[i]; ++j) + *p++ = (w[i] + j)->u; + else + goto error; + } + } + for (i = 0; i < nrv; ++i) /* same for v */ + { + 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) + *p++ = (w[i] + j)->v; + else + goto error; + } + } + } + } else if ((T = makeT(nru, nrv)) != NULL) { + /* else make returned Chebyshev coefficient structure */ + T->mu = nru - 1; /* save row degree */ + T->mv = nrv - 1; + T->a.u = a.u + b.u; /* set argument scaling */ + T->a.v = a.v + b.v; + T->b.u = 1. / (b.u - a.u); + 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]) != 0) + { + if ((p = T->cu[i].c = + (double *)pj_malloc(sizeof(double) * ncu[i]))) + for (j = 0; j < ncu[i]; ++j) + *p++ = (w[i] + j)->u; + else + goto error; + } + } + for (i = 0; i < nrv; ++i) /* same for v */ + { + 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) + *p++ = (w[i] + j)->v; + else + goto error; + } + } + } else + goto error; + } + goto gohome; + error: + if (T) { /* pj_dalloc up possible allocations */ + for (i = 0; i <= T->mu; ++i) + if (T->cu[i].c) + pj_dalloc(T->cu[i].c); + for (i = 0; i <= T->mv; ++i) + if (T->cv[i].c) + pj_dalloc(T->cv[i].c); + pj_dalloc(T); + } + T = 0; + gohome: + freev2((void **) w, nu); + pj_dalloc(ncu); + return T; +} diff --git a/proj4/src/multistresstest.c b/proj4/src/multistresstest.c new file mode 100644 index 000000000000..8c5df18f149b --- /dev/null +++ b/proj4/src/multistresstest.c @@ -0,0 +1,444 @@ +/****************************************************************************** + * + * Project: PROJ.4 + * Purpose: Mainline program to stress test multithreaded PROJ.4 processing. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include +#include +#include "proj_api.h" + +#ifdef _WIN32 + #include +#else + #include + #include +#endif + +#define num_threads 10 +#define num_iterations 1000000 +static int reinit_every_iteration=0; +static int add_no_defs = 0; + +typedef struct { + const char *src_def; + const char *dst_def; + + double src_x, src_y, src_z; + double dst_x, dst_y, dst_z; + + int dst_error; + int skip; +} TestItem; + +TestItem test_list[] = { + { + "+proj=utm +zone=11 +datum=WGS84", + "+proj=latlong +datum=WGS84", + 150000.0, 3000000.0, 0.0, + }, + { + "+proj=utm +zone=11 +datum=NAD83", + "+proj=latlong +datum=NAD27", + 150000.0, 3000000.0, 0.0, + }, + { + "+proj=utm +zone=11 +datum=NAD83", + "+proj=latlong +nadgrids=@null +ellps=WGS84", + 150000.0, 3000000.0, 0.0, + }, + { + "+proj=utm +zone=11 +datum=WGS84", + "+proj=merc +datum=potsdam", + 150000.0, 3000000.0, 0.0, + }, + { + "+proj=latlong +nadgrids=nzgd2kgrid0005.gsb", + "+proj=latlong +datum=WGS84", + 150000.0, 3000000.0, 0.0, + }, + { + "+proj=latlong +nadgrids=nzgd2kgrid0005.gsb", + "+proj=latlong +datum=WGS84", + 170 * DEG_TO_RAD, -40 * DEG_TO_RAD, 0.0, + }, + { + "+proj=latlong +ellps=GRS80 +towgs84=2,3,5", + "+proj=latlong +ellps=intl +towgs84=10,12,15", + 170 * DEG_TO_RAD, -40 * DEG_TO_RAD, 0.0, + }, + { + "+proj=eqc +lat_0=11 +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + "+proj=stere +lat_0=11 +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+proj=cea +lat_ts=11 +lon_0=12 +y_0=200000 +datum=WGS84 ", + "+proj=merc +lon_0=12 +k=0.999 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+proj=bonne +lat_1=11 +lon_0=12 +y_0=200000 +datum=WGS84 ", + "+proj=cass +lat_0=11 +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+proj=nzmg +lat_0=11 +lon_0=12 +y_0=200000 +datum=WGS84 ", + "+proj=gnom +lat_0=11 +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+proj=ortho +lat_0=11 +lon_0=12 +y_0=200000 +datum=WGS84 ", + "+proj=laea +lat_0=11 +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+proj=aeqd +lat_0=11 +lon_0=12 +y_0=200000 +datum=WGS84 ", + "+proj=eqdc +lat_1=20 +lat_2=5 +lat_0=11 +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+proj=mill +lat_0=11 +lon_0=12 +y_0=200000 +datum=WGS84 ", + "+proj=moll +lon_0=12 +x_0=100000 +y_0=200000 +datum=WGS84 ", + 150000.0, 250000.0, 0.0, + }, + { + "+init=epsg:3309", + "+init=epsg:4326", + 150000.0, 30000.0, 0.0, + }, + { + //Bad projection (invalid ellipsoid parameter +R_A=0) + "+proj=utm +zone=11 +datum=WGS84", + "+proj=merc +datum=potsdam +R_A=0", + 150000.0, 3000000.0, 0.0, + } +}; + +static volatile int active_thread_count = 0; + +static projPJ* custom_pj_init_plus_ctx(projCtx ctx, const char* def) +{ + if( add_no_defs ) + { + char szBuffer[256]; + strcpy(szBuffer, def); + strcat(szBuffer, " +no_defs"); + return pj_init_plus_ctx(ctx, szBuffer); + } + else + return pj_init_plus_ctx(ctx, def); +} + +/************************************************************************/ +/* TestThread() */ +/************************************************************************/ + +static void TestThread() + +{ + int i, test_count = sizeof(test_list) / sizeof(TestItem); + int repeat_count = num_iterations; + int i_iter; + +/* -------------------------------------------------------------------- */ +/* Initialize coordinate system definitions. */ +/* -------------------------------------------------------------------- */ + projPJ *src_pj_list, *dst_pj_list; + projCtx ctx = pj_ctx_alloc(); +// projCtx ctx = pj_get_default_ctx(); + + src_pj_list = (projPJ *) calloc(test_count,sizeof(projPJ)); + dst_pj_list = (projPJ *) calloc(test_count,sizeof(projPJ)); + + if(!reinit_every_iteration) + { + for( i = 0; i < test_count; i++ ) + { + TestItem *test = test_list + i; + + src_pj_list[i] = custom_pj_init_plus_ctx( ctx, test->src_def ); + dst_pj_list[i] = custom_pj_init_plus_ctx( ctx, test->dst_def ); + } + } + +/* -------------------------------------------------------------------- */ +/* Perform tests - over and over. */ +/* -------------------------------------------------------------------- */ + + for( i_iter = 0; i_iter < repeat_count; i_iter++ ) + { + for( i = 0; i < test_count; i++ ) + { + TestItem *test = test_list + i; + double x, y, z; + int error; + + x = test->src_x; + y = test->src_y; + z = test->src_z; + + if( reinit_every_iteration ) + { + src_pj_list[i] = custom_pj_init_plus_ctx( ctx, test->src_def ); + dst_pj_list[i] = custom_pj_init_plus_ctx( ctx, test->dst_def ); + + { + int skipTest = (src_pj_list[i] == NULL || dst_pj_list[i] == NULL); + + if ( skipTest != test->skip ) + fprintf( stderr, "Threaded projection initialization does not match unthreaded initialization\n" ); + + if (skipTest) + { + pj_free( src_pj_list[i] ); + pj_free( dst_pj_list[i] ); + continue; + } + } + } + + if ( test->skip ) + continue; + + error = pj_transform( src_pj_list[i], dst_pj_list[i], 1, 0, + &x, &y, &z ); + + + if( error != test->dst_error ) + { + fprintf( stderr, "Got error %d, expected %d\n", + error, test->dst_error ); + } + + if( x != test->dst_x || y != test->dst_y || z != test->dst_z ) + { + fprintf( stderr, + "Got %.15g,%.15g,%.15g\n" + "Expected %.15g,%.15g,%.15g\n" + "Diff %.15g,%.15g,%.15g\n", + x, y, z, + test->dst_x, test->dst_y, test->dst_z, + x-test->dst_x, y-test->dst_y, z-test->dst_z); + } + + if( reinit_every_iteration ) + { + pj_free( src_pj_list[i] ); + pj_free( dst_pj_list[i] ); + } + } + } + +/* -------------------------------------------------------------------- */ +/* Cleanup */ +/* -------------------------------------------------------------------- */ + if( !reinit_every_iteration ) + { + for( i = 0; i < test_count; i++ ) + { + pj_free( src_pj_list[i] ); + pj_free( dst_pj_list[i] ); + } + } + + free( src_pj_list ); + free( dst_pj_list ); + + pj_ctx_free( ctx ); + + printf( "%d iterations of the %d tests complete in thread X\n", + repeat_count, test_count ); + + active_thread_count--; +} + +#ifdef _WIN32 +/************************************************************************/ +/* WinTestThread() */ +/************************************************************************/ + +static DWORD WINAPI WinTestThread( LPVOID lpParameter ) + +{ + TestThread(); + + return 0; +} + +#else +/************************************************************************/ +/* PosixTestThread() */ +/************************************************************************/ + +static void *PosixTestThread( void *pData ) + +{ + TestThread(); + return NULL; +} +#endif + +/************************************************************************/ +/* main() */ +/************************************************************************/ +#ifdef _WIN32 +static DWORD WINAPI do_main( LPVOID unused ) +#else +int do_main(void) +#endif +{ +/* -------------------------------------------------------------------- */ +/* Our first pass is to establish the correct answers for all */ +/* the tests. */ +/* -------------------------------------------------------------------- */ + int i, test_count = sizeof(test_list) / sizeof(TestItem); + + for( i = 0; i < test_count; i++ ) + { + TestItem *test = test_list + i; + + projPJ src_pj, dst_pj; + + src_pj = custom_pj_init_plus_ctx( pj_get_default_ctx(), test->src_def ); + dst_pj = custom_pj_init_plus_ctx( pj_get_default_ctx(), test->dst_def ); + + if( src_pj == NULL ) + { + printf( "Unable to translate:\n%s\n", test->src_def ); + test->skip = 1; + continue; + } + + if( dst_pj == NULL ) + { + printf( "Unable to translate:\n%s\n", test->dst_def ); + test->skip = 1; + continue; + } + + test->dst_x = test->src_x; + test->dst_y = test->src_y; + test->dst_z = test->src_z; + + test->dst_error = pj_transform( src_pj, dst_pj, 1, 0, + &(test->dst_x), + &(test->dst_y), + &(test->dst_z) ); + + pj_free( src_pj ); + pj_free( dst_pj ); + + test->skip = 0; + +#ifdef notdef + printf( "Test %d - output %.14g,%.14g,%g\n", i, test->dst_x, test->dst_y, test->dst_z ); +#endif + } + + printf( "%d tests initialized.\n", test_count ); + +/* -------------------------------------------------------------------- */ +/* Now launch a bunch of threads to repeat the tests. */ +/* -------------------------------------------------------------------- */ +#ifdef _WIN32 + + { //Scoped to workaround lack of c99 support in VS + HANDLE ahThread[num_threads]; + + for( i = 0; i < num_threads; i++ ) + { + active_thread_count++; + + ahThread[i] = CreateThread(NULL, 0, WinTestThread, NULL, 0, NULL); + + if (ahThread[i] == 0) + { + printf( "Thread creation failed."); + return 1; + } + } + + printf( "%d test threads launched.\n", num_threads ); + + WaitForMultipleObjects(num_threads, ahThread, TRUE, INFINITE); + } + +#else + { + pthread_t ahThread[num_threads]; + pthread_attr_t hThreadAttr; + + pthread_attr_init( &hThreadAttr ); + pthread_attr_setdetachstate( &hThreadAttr, PTHREAD_CREATE_DETACHED ); + + for( i = 0; i < num_threads; i++ ) + { + active_thread_count++; + + pthread_create( &(ahThread[i]), &hThreadAttr, + PosixTestThread, NULL ); + } + + printf( "%d test threads launched.\n", num_threads ); + + while( active_thread_count > 0 ) + sleep( 1 ); + } +#endif + + printf( "all tests complete.\n" ); + + return 0; +} + + +int main( int argc, char **argv ) +{ + int i; + for(i=0;i +#include +#include + +#define PJ_LIB__ +#include +#define U_SEC_TO_RAD 4.848136811095359935899141023e-12 + +/************************************************************************/ +/* 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 *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 */ +/* ==================================================================== */ + + memset(ct.id,0,MAX_TAB_ID); + 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 (fwrite(&ct, sizeof(ct), 1, fp) != 1 || + fwrite(ct.cvs, tsize, 1, fp) != 1) { + fprintf(stderr, "output failure\n"); + 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); + } + + 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 / (M_PI/180.0)); + row_buf[i*4+1] = cvs->lam * (3600.0 / (M_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 ) + != (size_t)( 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/proj4/src/nad_cvt.c b/proj4/src/nad_cvt.c new file mode 100644 index 000000000000..f48f9e0de846 --- /dev/null +++ b/proj4/src/nad_cvt.c @@ -0,0 +1,68 @@ +#define PJ_LIB__ +#include +#define MAX_TRY 9 +#define TOL 1e-12 + LP +nad_cvt(LP in, int inverse, struct CTABLE *ct) { + LP t, tb; + + if (in.lam == HUGE_VAL) + return in; + /* normalize input to ll origin */ + tb = in; + tb.lam -= ct->ll.lam; + tb.phi -= ct->ll.phi; + tb.lam = adjlon(tb.lam - M_PI) + M_PI; + t = nad_intr(tb, ct); + if (inverse) { + LP del, dif; + int i = MAX_TRY; + + if (t.lam == HUGE_VAL) return t; + t.lam = tb.lam + t.lam; + t.phi = tb.phi - t.phi; + + do { + del = nad_intr(t, ct); + + /* This case used to return failure, but I have + changed it to return the first order approximation + of the inverse shift. This avoids cases where the + grid shift *into* this grid came from another grid. + While we aren't returning optimally correct results + I feel a close result in this case is better than + no result. NFW + To demonstrate use -112.5839956 49.4914451 against + the NTv2 grid shift file from Canada. */ + if (del.lam == HUGE_VAL) + { + if( getenv( "PROJ_DEBUG" ) != NULL ) + fprintf( stderr, + "Inverse grid shift iteration failed, presumably at grid edge.\n" + "Using first approximation.\n" ); + /* return del */; + break; + } + + t.lam -= dif.lam = t.lam - del.lam - tb.lam; + t.phi -= dif.phi = t.phi + del.phi - tb.phi; + } while (i-- && fabs(dif.lam) > TOL && fabs(dif.phi) > TOL); + if (i < 0) { + if( getenv( "PROJ_DEBUG" ) != NULL ) + fprintf( stderr, + "Inverse grid shift iterator failed to converge.\n" ); + t.lam = t.phi = HUGE_VAL; + return t; + } + in.lam = adjlon(t.lam + ct->ll.lam); + in.phi = t.phi + ct->ll.phi; + } else { + if (t.lam == HUGE_VAL) + in = t; + else { + in.lam -= t.lam; + in.phi += t.phi; + } + } + return in; +} diff --git a/proj4/src/nad_init.c b/proj4/src/nad_init.c new file mode 100644 index 000000000000..3b35ea639b54 --- /dev/null +++ b/proj4/src/nad_init.c @@ -0,0 +1,309 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Load datum shift files into memory. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include +#include + +#ifdef _WIN32_WCE +/* assert.h includes all Windows API headers and causes 'LP' name clash. + * Here assert we disable assert() for Windows CE. + * TODO - mloskot: re-implement porting friendly assert + */ +# define assert(exp) ((void)0) +#else +# include +#endif /* _WIN32_WCE */ + +/************************************************************************/ +/* swap_words() */ +/* */ +/* Convert the byte order of the given word(s) in place. */ +/************************************************************************/ + +static int byte_order_test = 1; +#define IS_LSB (((unsigned char *) (&byte_order_test))[0] == 1) + +static void swap_words( void *data_in, int word_size, int word_count ) + +{ + int word; + unsigned char *data = (unsigned char *) data_in; + + for( word = 0; word < word_count; word++ ) + { + int i; + + for( i = 0; i < word_size/2; i++ ) + { + int t; + + t = data[i]; + data[i] = data[word_size-i-1]; + data[word_size-i-1] = t; + } + + data += word_size; + } +} + +/************************************************************************/ +/* nad_ctable_load() */ +/* */ +/* Load the data portion of a ctable formatted grid. */ +/************************************************************************/ + +int nad_ctable_load( projCtx ctx, struct CTABLE *ct, PAFile fid ) + +{ + size_t a_size; + + pj_ctx_fseek( ctx, fid, sizeof(struct CTABLE), SEEK_SET ); + + /* read all the actual shift values */ + a_size = ct->lim.lam * ct->lim.phi; + ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size); + if( ct->cvs == NULL + || pj_ctx_fread(ctx, ct->cvs, sizeof(FLP), a_size, fid) != a_size ) + { + pj_dalloc( ct->cvs ); + ct->cvs = NULL; + + pj_log( ctx, PJ_LOG_ERROR, + "ctable loading failed on fread() - binary incompatible?\n" ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + return 1; +} + +/************************************************************************/ +/* nad_ctable_init() */ +/* */ +/* Read the header portion of a "ctable" format grid. */ +/************************************************************************/ + +struct CTABLE *nad_ctable_init( projCtx ctx, PAFile fid ) +{ + struct CTABLE *ct; + int id_end; + + /* read the table header */ + ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); + if( ct == NULL + || pj_ctx_fread( ctx, ct, sizeof(struct CTABLE), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return NULL; + } + + /* do some minimal validation to ensure the structure isn't corrupt */ + if( ct->lim.lam < 1 || ct->lim.lam > 100000 + || ct->lim.phi < 1 || ct->lim.phi > 100000 ) + { + pj_ctx_set_errno( ctx, -38 ); + return NULL; + } + + /* trim white space and newlines off id */ + for( id_end = strlen(ct->id)-1; id_end > 0; id_end-- ) + { + if( ct->id[id_end] == '\n' || ct->id[id_end] == ' ' ) + ct->id[id_end] = '\0'; + else + break; + } + + ct->cvs = NULL; + + return ct; +} + +/************************************************************************/ +/* nad_ctable2_load() */ +/* */ +/* Load the data portion of a ctable2 formatted grid. */ +/************************************************************************/ + +int nad_ctable2_load( projCtx ctx, struct CTABLE *ct, PAFile fid ) + +{ + size_t a_size; + + pj_ctx_fseek( ctx, 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 + || pj_ctx_fread(ctx, 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, PAFile fid ) +{ + struct CTABLE *ct; + int id_end; + char header[160]; + + if( pj_ctx_fread( ctx, 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_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_init() */ +/* */ +/* Read a datum shift file in any of the supported binary formats. */ +/************************************************************************/ + +struct CTABLE *nad_init(projCtx ctx, char *name) +{ + char fname[MAX_PATH_FILENAME+1]; + struct CTABLE *ct; + PAFile fid; + + ctx->last_errno = 0; + +/* -------------------------------------------------------------------- */ +/* Open the file using the usual search rules. */ +/* -------------------------------------------------------------------- */ + strcpy(fname, name); + if (!(fid = pj_open_lib(ctx, fname, "rb"))) { + return 0; + } + + ct = nad_ctable_init( ctx, fid ); + if( ct != NULL ) + { + if( !nad_ctable_load( ctx, ct, fid ) ) + { + nad_free( ct ); + ct = NULL; + } + } + + pj_ctx_fclose(ctx, fid); + return ct; +} + +/************************************************************************/ +/* nad_free() */ +/* */ +/* Free a CTABLE grid shift structure produced by nad_init(). */ +/************************************************************************/ + +void nad_free(struct CTABLE *ct) +{ + if (ct) { + if( ct->cvs != NULL ) + pj_dalloc(ct->cvs); + + pj_dalloc(ct); + } +} diff --git a/proj4/src/nad_intr.c b/proj4/src/nad_intr.c new file mode 100644 index 000000000000..299f1806b388 --- /dev/null +++ b/proj4/src/nad_intr.c @@ -0,0 +1,62 @@ +/* Determine nad table correction value */ +#define PJ_LIB__ +#include + LP +nad_intr(LP t, struct CTABLE *ct) { + LP val, frct; + ILP indx; + double m00, m10, m01, m11; + FLP *f00, *f10, *f01, *f11; + long index; + int in; + + indx.lam = floor(t.lam /= ct->del.lam); + indx.phi = floor(t.phi /= ct->del.phi); + frct.lam = t.lam - indx.lam; + frct.phi = t.phi - indx.phi; + val.lam = val.phi = HUGE_VAL; + if (indx.lam < 0) { + if (indx.lam == -1 && frct.lam > 0.99999999999) { + ++indx.lam; + frct.lam = 0.; + } else + return val; + } else if ((in = indx.lam + 1) >= ct->lim.lam) { + if (in == ct->lim.lam && frct.lam < 1e-11) { + --indx.lam; + frct.lam = 1.; + } else + return val; + } + if (indx.phi < 0) { + if (indx.phi == -1 && frct.phi > 0.99999999999) { + ++indx.phi; + frct.phi = 0.; + } else + return val; + } else if ((in = indx.phi + 1) >= ct->lim.phi) { + if (in == ct->lim.phi && frct.phi < 1e-11) { + --indx.phi; + frct.phi = 1.; + } else + return val; + } + index = indx.phi * ct->lim.lam + indx.lam; + f00 = ct->cvs + index++; + f10 = ct->cvs + index; + index += ct->lim.lam; + f11 = ct->cvs + index--; + f01 = ct->cvs + index; + m11 = m10 = frct.lam; + m00 = m01 = 1. - frct.lam; + m11 *= frct.phi; + m01 *= frct.phi; + frct.phi = 1. - frct.phi; + m00 *= frct.phi; + m10 *= frct.phi; + val.lam = m00 * f00->lam + m10 * f10->lam + + m01 * f01->lam + m11 * f11->lam; + val.phi = m00 * f00->phi + m10 * f10->phi + + m01 * f01->phi + m11 * f11->phi; + return val; +} diff --git a/proj4/src/nad_list.h b/proj4/src/nad_list.h new file mode 100644 index 000000000000..f82a2ab7bac9 --- /dev/null +++ b/proj4/src/nad_list.h @@ -0,0 +1,6 @@ +/* projection list for program nad2nad */ +PROJ_HEAD(lcc, "Lambert Conformal Conic") +PROJ_HEAD(omerc, "Oblique Mercator") +PROJ_HEAD(poly, "Polyconic (American)") +PROJ_HEAD(tmerc, "Transverse Mercator") +PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") diff --git a/proj4/src/org_proj4_PJ.h b/proj4/src/org_proj4_PJ.h new file mode 100644 index 000000000000..7e690e7ab9b2 --- /dev/null +++ b/proj4/src/org_proj4_PJ.h @@ -0,0 +1,135 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* 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/proj4/src/org_proj4_Projections.h b/proj4/src/org_proj4_Projections.h new file mode 100644 index 000000000000..3841e0572def --- /dev/null +++ b/proj4/src/org_proj4_Projections.h @@ -0,0 +1,37 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_proj4_Projections */ + +#ifndef _Included_org_proj4_Projections +#define _Included_org_proj4_Projections +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_proj4_Projections + * Method: getProjInfo + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getProjInfo + (JNIEnv *, jobject, jstring); + +/* + * Class: org_proj4_Projections + * Method: getEllipsInfo + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getEllipsInfo + (JNIEnv *, jobject, jstring); + +/* + * Class: org_proj4_Projections + * Method: transform + * Signature: ([D[D[DLjava/lang/String;Ljava/lang/String;JI)V + */ +JNIEXPORT void JNICALL Java_org_proj4_Projections_transform + (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jstring, jstring, jlong, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/proj4/src/p_series.c b/proj4/src/p_series.c new file mode 100644 index 000000000000..7499ab49f059 --- /dev/null +++ b/proj4/src/p_series.c @@ -0,0 +1,39 @@ +/* print row coefficients of Tseries structure */ +#include "projects.h" +#include +#include +#define NF 20 /* length of final format string */ +#define CUT 60 /* check length of line */ + void +p_series(Tseries *T, FILE *file, char *fmt) { + int i, j, n, L; + char format[NF+1]; + + *format = ' '; + strncpy(format + 1, fmt, NF - 3); + strcat(format, "%n"); + fprintf(file, "u: %d\n", T->mu+1); + for (i = 0; i <= T->mu; ++i) + if (T->cu[i].m) { + fprintf(file, "%d %d%n", i, T->cu[i].m, &L); + n = 0; + for (j = 0; j < T->cu[i].m; ++j) { + if ((L += n) > CUT) + fprintf(file, "\n %n", &L); + fprintf(file, format, T->cu[i].c[j], &n); + } + fputc('\n', file); + } + fprintf(file, "v: %d\n", T->mv+1); + for (i = 0; i <= T->mv; ++i) + if (T->cv[i].m) { + fprintf(file, "%d %d%n", i, T->cv[i].m, &L); + n = 0; + for (j = 0; j < T->cv[i].m; ++j) { + if ((L += n) > 60) + fprintf(file, "\n %n", &L); + fprintf(file, format, T->cv[i].c[j], &n); + } + fputc('\n', file); + } +} diff --git a/proj4/src/pj_apply_gridshift.c b/proj4/src/pj_apply_gridshift.c new file mode 100644 index 000000000000..d61419052e80 --- /dev/null +++ b/proj4/src/pj_apply_gridshift.c @@ -0,0 +1,254 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Apply datum shifts based on grid shift files (normally NAD27 to + * NAD83 or the reverse). This module is responsible for keeping + * a list of loaded grids, and calling with each one that is + * allowed for a given datum (expressed as the nadgrids= parameter). + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +/************************************************************************/ +/* pj_apply_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( projCtx ctx, const char *nadgrids, int inverse, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + 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; + static int debug_count = 0; + (void) z; + + if( tables == NULL || grid_count == 0 ) + { + pj_ctx_set_errno( ctx, -38); + return -38; + } + + ctx->last_errno = 0; + + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + LP input, output; + int itable; + + input.phi = y[io]; + input.lam = x[io]; + output.phi = HUGE_VAL; + output.lam = HUGE_VAL; + + /* keep trying till we find a table that works */ + for( itable = 0; itable < grid_count; itable++ ) + { + 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 - 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. */ + while( gi->child ) + { + PJ_GRIDINFO *child; + + for( child = gi->child; child != NULL; child = child->next ) + { + struct CTABLE *ct1 = child->ct; + 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; + } + + /* If we didn't find a child then nothing more to do */ + + if( child == NULL ) break; + + /* Otherwise use the child, first checking it's children */ + + gi = child; + ct = child->ct; + } + + /* load the grid shift info if we don't have it. */ + if( ct->cvs == NULL && !pj_gridinfo_load( ctx, gi ) ) + { + pj_ctx_set_errno( ctx, -38 ); + return -38; + } + + output = nad_cvt( input, inverse, ct ); + if( output.lam != HUGE_VAL ) + { + 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( ctx->debug_level >= PJ_LOG_DEBUG_MAJOR ) + { + 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 ); + } + } + + /* + * 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 + { + y[io] = output.phi; + x[io] = output.lam; + } + } + + return 0; +} + diff --git a/proj4/src/pj_apply_vgridshift.c b/proj4/src/pj_apply_vgridshift.c new file mode 100644 index 000000000000..297211c1e6ec --- /dev/null +++ b/proj4/src/pj_apply_vgridshift.c @@ -0,0 +1,213 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Apply vertical datum shifts based on grid shift files, normally + * geoid grids mapping WGS84 to NAVD88 or something similar. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +/************************************************************************/ +/* pj_apply_vgridshift() */ +/* */ +/* This implmentation takes uses the gridlist from a coordinate */ +/* system definition. If the gridlist has not yet been */ +/* populated in the coordinate system definition we set it up */ +/* now. */ +/************************************************************************/ + +int pj_apply_vgridshift( PJ *defn, const char *listname, + PJ_GRIDINFO ***gridlist_p, + int *gridlist_count_p, + int inverse, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + int i; + static int debug_count = 0; + PJ_GRIDINFO **tables; + + if( *gridlist_p == NULL ) + { + *gridlist_p = + pj_gridlist_from_nadgrids( pj_get_ctx(defn), + pj_param(defn->ctx,defn->params,listname).s, + gridlist_count_p ); + + if( *gridlist_p == NULL || *gridlist_count_p == 0 ) + return defn->ctx->last_errno; + } + + if( *gridlist_count_p == 0 ) + { + pj_ctx_set_errno( defn->ctx, -38); + return -38; + } + + tables = *gridlist_p; + defn->ctx->last_errno = 0; + + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + LP input; + int itable; + double value = HUGE_VAL; + + input.phi = y[io]; + input.lam = x[io]; + + /* keep trying till we find a table that works */ + for( itable = 0; itable < *gridlist_count_p; itable++ ) + { + PJ_GRIDINFO *gi = tables[itable]; + struct CTABLE *ct = gi->ct; + double grid_x, grid_y; + int grid_ix, grid_iy; + float *cvs; + + /* skip tables that don't match our point at all. */ + if( ct->ll.phi > input.phi || ct->ll.lam > input.lam + || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi + || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam ) + continue; + + /* If we have child nodes, check to see if any of them apply. */ + while( 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 didn't find a more refined child node to use, so go with current grid */ + if( child == NULL ) + { + break; + } + + /* Otherwise let's try for childrens children .. */ + 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); + + /* nodata? */ + /* GTX official nodata value if -88.88880f, but some grids also */ + /* use other big values for nodata (e.g naptrans2008.gtx has */ + /* nodata values like -2147479936), so test them too */ + if( value > 1000 || value < -1000 || value == -88.88880f ) + 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/proj4/src/pj_auth.c b/proj4/src/pj_auth.c new file mode 100644 index 000000000000..35178418b2e5 --- /dev/null +++ b/proj4/src/pj_auth.c @@ -0,0 +1,30 @@ +/* determine latitude from authalic latitude */ +#include +# 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))) != NULL) { + APA[0] = es * P00; + t = es * es; + APA[0] += t * P01; + APA[1] = t * P10; + t *= es; + APA[0] += t * P02; + APA[1] += t * P11; + APA[2] = t * P20; + } + return APA; +} + double +pj_authlat(double beta, double *APA) { + double t = beta+beta; + return(beta + APA[0] * sin(t) + APA[1] * sin(t+t) + APA[2] * sin(t+t+t)); +} diff --git a/proj4/src/pj_ctx.c b/proj4/src/pj_ctx.c new file mode 100644 index 000000000000..43d12255cd68 --- /dev/null +++ b/proj4/src/pj_ctx.c @@ -0,0 +1,196 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the projCtx thread context object. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include + +static projCtx_t default_context; +static volatile 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.last_errno = 0; + default_context.debug_level = PJ_LOG_NONE; + default_context.logger = pj_stderr_logger; + default_context.app_data = NULL; + default_context.fileapi = pj_get_default_fileapi(); + + 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; + } + default_context_initialized = 1; + } + + 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; +} + +/************************************************************************/ +/* pj_ctx_set_fileapi() */ +/************************************************************************/ + +void pj_ctx_set_fileapi( projCtx ctx, projFileAPI *fileapi ) + +{ + ctx->fileapi = fileapi; +} + +/************************************************************************/ +/* pj_ctx_get_fileapi() */ +/************************************************************************/ + +projFileAPI *pj_ctx_get_fileapi( projCtx ctx ) + +{ + return ctx->fileapi; +} + + diff --git a/proj4/src/pj_datum_set.c b/proj4/src/pj_datum_set.c new file mode 100644 index 000000000000..194bfe572939 --- /dev/null +++ b/proj4/src/pj_datum_set.c @@ -0,0 +1,151 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Apply datum definition to PJ structure from initialization string. + * Author: Frank Warmerdam, warmerda@home.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include + +/* SEC_TO_RAD = Pi/180/3600 */ +#define SEC_TO_RAD 4.84813681109535993589914102357e-6 + +/************************************************************************/ +/* pj_datum_set() */ +/************************************************************************/ + +int pj_datum_set(projCtx ctx, paralist *pl, PJ *projdef) + +{ + const char *name, *towgs84, *nadgrids, *catalog; + + projdef->datum_type = PJD_UNKNOWN; + +/* -------------------------------------------------------------------- */ +/* Is there a datum definition in the parameters list? If so, */ +/* add the defining values to the parameter list. Note that */ +/* this will append the ellipse definition as well as the */ +/* towgs84= and related parameters. It should also be pointed */ +/* out that the addition is permanent rather than temporary */ +/* like most other keyword expansion so that the ellipse */ +/* definition will last into the pj_ell_set() function called */ +/* after this one. */ +/* -------------------------------------------------------------------- */ + if( (name = pj_param(ctx, pl,"sdatum").s) != NULL ) + { + paralist *curr; + const char *s; + int i; + + /* find the end of the list, so we can add to it */ + for (curr = pl; curr && curr->next ; curr = curr->next) {} + + /* find the datum definition */ + for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {} + + if (!s) { pj_ctx_set_errno(ctx, -9); return 1; } + + if( pj_datums[i].ellipse_id && strlen(pj_datums[i].ellipse_id) > 0 ) + { + char entry[100]; + + strcpy( entry, "ellps=" ); + strncat( entry, pj_datums[i].ellipse_id, 80 ); + curr = curr->next = pj_mkparam(entry); + } + + if( pj_datums[i].defn && strlen(pj_datums[i].defn) > 0 ) + curr = curr->next = pj_mkparam(pj_datums[i].defn); + } + +/* -------------------------------------------------------------------- */ +/* Check for nadgrids parameter. */ +/* -------------------------------------------------------------------- */ + 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 */ + + projdef->datum_type = PJD_GRIDSHIFT; + } + +/* -------------------------------------------------------------------- */ +/* 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(ctx, pl,"stowgs84").s) != NULL ) + { + int parm_count = 0; + const char *s; + + memset( projdef->datum_params, 0, sizeof(double) * 7); + + /* parse out the parameters */ + for( s = towgs84; *s != '\0' && parm_count < 7; ) + { + projdef->datum_params[parm_count++] = pj_atof(s); + while( *s != '\0' && *s != ',' ) + s++; + if( *s == ',' ) + s++; + } + + if( projdef->datum_params[3] != 0.0 + || projdef->datum_params[4] != 0.0 + || projdef->datum_params[5] != 0.0 + || projdef->datum_params[6] != 0.0 ) + { + projdef->datum_type = PJD_7PARAM; + + /* transform from arc seconds to radians */ + projdef->datum_params[3] *= SEC_TO_RAD; + projdef->datum_params[4] *= SEC_TO_RAD; + projdef->datum_params[5] *= SEC_TO_RAD; + /* transform from parts per million to scaling factor */ + projdef->datum_params[6] = + (projdef->datum_params[6]/1000000.0) + 1; + } + else + projdef->datum_type = PJD_3PARAM; + + /* Note that pj_init() will later switch datum_type to + PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */ + } + + return 0; +} diff --git a/proj4/src/pj_datums.c b/proj4/src/pj_datums.c new file mode 100644 index 000000000000..c9655cd688d6 --- /dev/null +++ b/proj4/src/pj_datums.c @@ -0,0 +1,97 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Built in datum list. + * Author: Frank Warmerdam, warmerda@home.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_DATUMS__ + +#include + +/* + * The ellipse code must match one from pj_ellps.c. The datum id should + * be kept to 12 characters or less if possible. Use the official OGC + * datum name for the comments if available. + */ + +C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[] = { +/* id definition ellipse comments */ +/* -- ---------- ------- -------- */ +{"WGS84", "towgs84=0,0,0", "WGS84", ""}, +{"GGRS87", "towgs84=-199.87,74.79,246.62", "GRS80", + "Greek_Geodetic_Reference_System_1987"}, +{"NAD83", "towgs84=0,0,0", "GRS80", + "North_American_Datum_1983"}, +{"NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", + "clrk66", + "North_American_Datum_1927"}, +{"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", "clrk80ign", + "Carthage 1934 Tunisia"}, +{"hermannskogel", "towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232", + "bessel", + "Hermannskogel"}, +{"ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", + "mod_airy", + "Ireland 1965"}, +{"nzgd49", "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", + "intl", "New Zealand Geodetic Datum 1949"}, +{"OSGB36", "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", + "airy", "Airy 1830"}, +{NULL, NULL, NULL, NULL} +}; + +struct PJ_DATUMS *pj_get_datums_ref() + +{ + return pj_datums; +} + +C_NAMESPACE_VAR struct PJ_PRIME_MERIDIANS pj_prime_meridians[] = { + /* id definition */ + /* -- ---------- */ + {"greenwich", "0dE"}, + {"lisbon", "9d07'54.862\"W"}, + {"paris", "2d20'14.025\"E"}, + {"bogota", "74d04'51.3\"W"}, + {"madrid", "3d41'16.58\"W"}, + {"rome", "12d27'8.4\"E"}, + {"bern", "7d26'22.5\"E"}, + {"jakarta", "106d48'27.79\"E"}, + {"ferro", "17d40'W"}, + {"brussels", "4d22'4.71\"E"}, + {"stockholm", "18d3'29.8\"E"}, + {"athens", "23d42'58.815\"E"}, + {"oslo", "10d43'22.5\"E"}, + {NULL, NULL} +}; + +struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref() + +{ + return pj_prime_meridians; +} + diff --git a/proj4/src/pj_deriv.c b/proj4/src/pj_deriv.c new file mode 100644 index 000000000000..2f886476fd8b --- /dev/null +++ b/proj4/src/pj_deriv.c @@ -0,0 +1,33 @@ +/* dervative of (*P->fwd) projection */ +#define PJ_LIB__ +#include "projects.h" + int +pj_deriv(LP lp, double h, PJ *P, struct DERIVS *der) { + XY t; + + lp.lam += h; + lp.phi += h; + if (fabs(lp.phi) > M_HALFPI) return 1; + h += h; + t = (*P->fwd)(lp, P); + if (t.x == HUGE_VAL) return 1; + der->x_l = t.x; der->y_p = t.y; der->x_p = -t.x; der->y_l = -t.y; + lp.phi -= h; + if (fabs(lp.phi) > M_HALFPI) return 1; + t = (*P->fwd)(lp, P); + if (t.x == HUGE_VAL) return 1; + der->x_l += t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l -= t.y; + lp.lam -= h; + t = (*P->fwd)(lp, P); + if (t.x == HUGE_VAL) return 1; + der->x_l -= t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l += t.y; + lp.phi += h; + t = (*P->fwd)(lp, P); + if (t.x == HUGE_VAL) return 1; + der->x_l -= t.x; der->y_p += t.y; der->x_p -= t.x; der->y_l += t.y; + der->x_l /= (h += h); + der->y_p /= h; + der->x_p /= h; + der->y_l /= h; + return 0; +} diff --git a/proj4/src/pj_ell_set.c b/proj4/src/pj_ell_set.c new file mode 100644 index 000000000000..7ca88ed147a1 --- /dev/null +++ b/proj4/src/pj_ell_set.c @@ -0,0 +1,104 @@ +/* set ellipsoid parameters a and es */ +#include +#include +#define SIXTH .1666666666666666667 /* 1/6 */ +#define RA4 .04722222222222222222 /* 17/360 */ +#define RA6 .02215608465608465608 /* 67/3024 */ +#define RV4 .06944444444444444444 /* 5/72 */ +#define RV6 .04243827160493827160 /* 55/1296 */ + int /* initialize geographic shape parameters */ +pj_ell_set(projCtx ctx, paralist *pl, double *a, double *es) { + int i; + double b=0.0, e; + char *name; + paralist *start = 0; + + /* 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(ctx, pl, "tR").i) + *a = pj_param(ctx,pl, "dR").f; + else { /* probable elliptical figure */ + + /* check if ellps present and temporarily append its values to pl */ + if ((name = pj_param(ctx,pl, "sellps").s) != NULL) { + char *s; + + for (start = pl; start && start->next ; start = start->next) ; + for (i = 0; (s = pj_ellps[i].id) && strcmp(name, s) ; ++i) ; + if (!s) { pj_ctx_set_errno( ctx, -9); return 1; } + start->next = pj_mkparam(pj_ellps[i].major); + start->next->next = pj_mkparam(pj_ellps[i].ell); + } + *a = pj_param(ctx,pl, "da").f; + if (pj_param(ctx,pl, "tes").i) /* eccentricity squared */ + *es = pj_param(ctx,pl, "des").f; + else if (pj_param(ctx,pl, "te").i) { /* eccentricity */ + e = pj_param(ctx,pl, "de").f; + *es = e * e; + } else if (pj_param(ctx,pl, "trf").i) { /* recip flattening */ + *es = pj_param(ctx,pl, "drf").f; + if (!*es) { + pj_ctx_set_errno( ctx, -10); + goto bomb; + } + *es = 1./ *es; + *es = *es * (2. - *es); + } else if (pj_param(ctx,pl, "tf").i) { /* flattening */ + *es = pj_param(ctx,pl, "df").f; + *es = *es * (2. - *es); + } else if (pj_param(ctx,pl, "tb").i) { /* minor axis */ + b = pj_param(ctx,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(ctx,pl, "bR_A").i) { /* sphere--area of ellipsoid */ + *a *= 1. - *es * (SIXTH + *es * (RA4 + *es * RA6)); + *es = 0.; + } else if (pj_param(ctx,pl, "bR_V").i) { /* sphere--vol. of ellipsoid */ + *a *= 1. - *es * (SIXTH + *es * (RV4 + *es * RV6)); + *es = 0.; + } else if (pj_param(ctx,pl, "bR_a").i) { /* sphere--arithmetic mean */ + *a = .5 * (*a + b); + *es = 0.; + } else if (pj_param(ctx,pl, "bR_g").i) { /* sphere--geometric mean */ + *a = sqrt(*a * b); + *es = 0.; + } else if (pj_param(ctx,pl, "bR_h").i) { /* sphere--harmonic mean */ + *a = 2. * *a * b / (*a + b); + *es = 0.; + } else if ((i = pj_param(ctx,pl, "tR_lat_a").i) || /* sphere--arith. */ + pj_param(ctx,pl, "tR_lat_g").i) { /* or geom. mean at latitude */ + double tmp; + + tmp = sin(pj_param(ctx,pl, i ? "rR_lat_a" : "rR_lat_g").f); + if (fabs(tmp) > M_HALFPI) { + pj_ctx_set_errno(ctx,-11); + goto bomb; + } + tmp = 1. - *es * tmp * tmp; + *a *= i ? .5 * (1. - *es + tmp) / ( tmp * sqrt(tmp)) : + sqrt(1. - *es) / tmp; + *es = 0.; + } +bomb: + if (start) { /* clean up temporary extension of list */ + pj_dalloc(start->next->next); + pj_dalloc(start->next); + start->next = 0; + } + if (ctx->last_errno) + return 1; + } + /* some remaining checks */ + if (*es < 0.) + { pj_ctx_set_errno( ctx, -12); return 1; } + if (*a <= 0.) + { pj_ctx_set_errno( ctx, -13); return 1; } + return 0; +} diff --git a/proj4/src/pj_ellps.c b/proj4/src/pj_ellps.c new file mode 100644 index 000000000000..32fbbd423d03 --- /dev/null +++ b/proj4/src/pj_ellps.c @@ -0,0 +1,57 @@ +/* definition of standard geoids */ +#define PJ_ELLPS__ +#include "projects.h" + +C_NAMESPACE_VAR struct PJ_ELLPS +pj_ellps[] = { +{"MERIT", "a=6378137.0", "rf=298.257", "MERIT 1983"}, +{"SGS85", "a=6378136.0", "rf=298.257", "Soviet Geodetic System 85"}, +{"GRS80", "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)"}, +{"IAU76", "a=6378140.0", "rf=298.257", "IAU 1976"}, +{"airy", "a=6377563.396", "b=6356256.910", "Airy 1830"}, +{"APL4.9", "a=6378137.0.", "rf=298.25", "Appl. Physics. 1965"}, +{"NWL9D", "a=6378145.0.", "rf=298.25", "Naval Weapons Lab., 1965"}, +{"mod_airy", "a=6377340.189", "b=6356034.446", "Modified Airy"}, +{"andrae", "a=6377104.43", "rf=300.0", "Andrae 1876 (Den., Iclnd.)"}, +{"aust_SA", "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969"}, +{"GRS67", "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)"}, +{"bessel", "a=6377397.155", "rf=299.1528128", "Bessel 1841"}, +{"bess_nam", "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)"}, +{"clrk66", "a=6378206.4", "b=6356583.8", "Clarke 1866"}, +{"clrk80", "a=6378249.145", "rf=293.4663", "Clarke 1880 mod."}, +{"clrk80ign", "a=6378249.2", "rf=293.4660212936269", "Clarke 1880 (IGN)."}, +{"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)"}, +{NULL, NULL, NULL, NULL} +}; + +struct PJ_ELLPS *pj_get_ellps_ref() + +{ + return pj_ellps; +} diff --git a/proj4/src/pj_errno.c b/proj4/src/pj_errno.c new file mode 100644 index 000000000000..8b91ab293937 --- /dev/null +++ b/proj4/src/pj_errno.c @@ -0,0 +1,17 @@ +/* For full ANSI compliance of global variable */ + +#include + +C_NAMESPACE_VAR int pj_errno = 0; + +/************************************************************************/ +/* pj_get_errno_ref() */ +/************************************************************************/ + +int *pj_get_errno_ref() + +{ + return &pj_errno; +} + +/* end */ diff --git a/proj4/src/pj_factors.c b/proj4/src/pj_factors.c new file mode 100644 index 000000000000..ac23ed719748 --- /dev/null +++ b/proj4/src/pj_factors.c @@ -0,0 +1,86 @@ +/* projection scale factors */ +#define PJ_LIB__ +#include +#include +#ifndef DEFAULT_H +#define DEFAULT_H 1e-5 /* radian default for numeric h */ +#endif +#define EPS 1.0e-12 + int +pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { + struct DERIVS der; + double cosphi, t, n, r; + + /* check for forward and latitude or longitude overange */ + if ((t = fabs(lp.phi)-M_HALFPI) > EPS || fabs(lp.lam) > 10.) { + 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) > (M_HALFPI - h)) + /* adjust to value around pi/2 where derived still exists*/ + lp.phi = lp.phi < 0. ? (-M_HALFPI+h) : (M_HALFPI-h); + else if (P->geoc) + lp.phi = atan(P->rone_es * tan(lp.phi)); + lp.lam -= P->lam0; /* compute del lp.lam */ + if (!P->over) + lp.lam = adjlon(lp.lam); /* adjust del longitude */ + if (P->spc) /* get what projection analytic values */ + P->spc(lp, P, fac); + if (((fac->code & (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) != + (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) && + pj_deriv(lp, h, P, &der)) + return 1; + if (!(fac->code & IS_ANAL_XL_YL)) { + fac->der.x_l = der.x_l; + fac->der.y_l = der.y_l; + } + if (!(fac->code & IS_ANAL_XP_YP)) { + fac->der.x_p = der.x_p; + fac->der.y_p = der.y_p; + } + cosphi = cos(lp.phi); + if (!(fac->code & IS_ANAL_HK)) { + fac->h = hypot(fac->der.x_p, fac->der.y_p); + fac->k = hypot(fac->der.x_l, fac->der.y_l) / cosphi; + if (P->es) { + t = sin(lp.phi); + t = 1. - P->es * t * t; + n = sqrt(t); + fac->h *= t * n / P->one_es; + fac->k *= n; + r = t * t / P->one_es; + } else + r = 1.; + } else if (P->es) { + r = sin(lp.phi); + r = 1. - P->es * r * r; + r = r * r / P->one_es; + } else + r = 1.; + /* convergence */ + if (!(fac->code & IS_ANAL_CONV)) { + fac->conv = - atan2(fac->der.y_l, fac->der.x_l); + if (fac->code & IS_ANAL_XL_YL) + fac->code |= IS_ANAL_CONV; + } + /* areal scale factor */ + 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(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); + t = (t = t - 2. * fac->s) <= 0. ? 0. : sqrt(t); + fac->b = 0.5 * (fac->a - t); + fac->a = 0.5 * (fac->a + t); + /* omega */ + fac->omega = 2. * aasin(P->ctx,(fac->a - fac->b)/(fac->a + fac->b)); + } + return 0; +} diff --git a/proj4/src/pj_fileapi.c b/proj4/src/pj_fileapi.c new file mode 100644 index 000000000000..fa35f30acbb6 --- /dev/null +++ b/proj4/src/pj_fileapi.c @@ -0,0 +1,199 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of the pj_ctx_* file api, and the default stdio + * based implementation. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2013, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include + +static PAFile pj_stdio_fopen(projCtx ctx, const char *filename, + const char *access); +static size_t pj_stdio_fread(void *buffer, size_t size, size_t nmemb, + PAFile file); +static int pj_stdio_fseek(PAFile file, long offset, int whence); +static long pj_stdio_ftell(PAFile file); +static void pj_stdio_fclose(PAFile file); + +static projFileAPI default_fileapi = { + pj_stdio_fopen, + pj_stdio_fread, + pj_stdio_fseek, + pj_stdio_ftell, + pj_stdio_fclose +}; + +typedef struct { + projCtx ctx; + FILE *fp; +} stdio_pafile; + +/************************************************************************/ +/* pj_get_default_fileapi() */ +/************************************************************************/ + +projFileAPI *pj_get_default_fileapi() +{ + return &default_fileapi; +} + +/************************************************************************/ +/* pj_stdio_fopen() */ +/************************************************************************/ + +static PAFile pj_stdio_fopen(projCtx ctx, const char *filename, + const char *access) +{ + stdio_pafile *pafile; + FILE *fp; + + fp = fopen(filename, access); + if (fp == NULL) + { + return NULL; + } + + pafile = (stdio_pafile *) malloc(sizeof(stdio_pafile)); + pafile->fp = fp; + pafile->ctx = ctx; + return (PAFile) pafile; +} + +/************************************************************************/ +/* pj_stdio_fread() */ +/************************************************************************/ + +static size_t pj_stdio_fread(void *buffer, size_t size, size_t nmemb, + PAFile file) +{ + stdio_pafile *pafile = (stdio_pafile *) file; + return fread(buffer, size, nmemb, pafile->fp); +} + +/************************************************************************/ +/* pj_stdio_fseek() */ +/************************************************************************/ +static int pj_stdio_fseek(PAFile file, long offset, int whence) +{ + stdio_pafile *pafile = (stdio_pafile *) file; + return fseek(pafile->fp, offset, whence); +} + +/************************************************************************/ +/* pj_stdio_ftell() */ +/************************************************************************/ +static long pj_stdio_ftell(PAFile file) +{ + stdio_pafile *pafile = (stdio_pafile *) file; + return ftell(pafile->fp); +} + +/************************************************************************/ +/* pj_stdio_fclose() */ +/************************************************************************/ +static void pj_stdio_fclose(PAFile file) +{ + stdio_pafile *pafile = (stdio_pafile *) file; + fclose(pafile->fp); + free(pafile); +} + +/************************************************************************/ +/* pj_ctx_fopen() */ +/* */ +/* Open a file using the provided file io hooks. */ +/************************************************************************/ + +PAFile pj_ctx_fopen(projCtx ctx, const char *filename, const char *access) +{ + return ctx->fileapi->FOpen(ctx, filename, access); +} + +/************************************************************************/ +/* pj_ctx_fread() */ +/************************************************************************/ +size_t pj_ctx_fread(projCtx ctx, void *buffer, size_t size, size_t nmemb, PAFile file) +{ + return ctx->fileapi->FRead(buffer, size, nmemb, file); +} + +/************************************************************************/ +/* pj_ctx_fseek() */ +/************************************************************************/ +int pj_ctx_fseek(projCtx ctx, PAFile file, long offset, int whence) +{ + return ctx->fileapi->FSeek(file, offset, whence); +} + +/************************************************************************/ +/* pj_ctx_ftell() */ +/************************************************************************/ +long pj_ctx_ftell(projCtx ctx, PAFile file) +{ + return ctx->fileapi->FTell(file); +} + +/************************************************************************/ +/* pj_ctx_fclose() */ +/************************************************************************/ +void pj_ctx_fclose(projCtx ctx, PAFile file) +{ + ctx->fileapi->FClose(file); +} + +/************************************************************************/ +/* pj_ctx_fgets() */ +/* */ +/* A not very optimal implementation of fgets on top of */ +/* fread(). If we end up using this a lot more care should be */ +/* taken. */ +/************************************************************************/ + +char *pj_ctx_fgets(projCtx ctx, char *line, int size, PAFile file) +{ + long start = pj_ctx_ftell(ctx, file); + size_t bytes_read; + int i; + + line[size-1] = '\0'; + bytes_read = pj_ctx_fread(ctx, line, 1, size-1, file); + if(bytes_read == 0) + return NULL; + if(bytes_read < (size_t)size) + { + line[bytes_read] = '\0'; + } + + for( i = 0; i < size-2; i++) + { + if (line[i] == '\n') + { + line[i+1] = '\0'; + pj_ctx_fseek(ctx, file, start + i + 1, SEEK_SET); + break; + } + } + return line; +} diff --git a/proj4/src/pj_fwd.c b/proj4/src/pj_fwd.c new file mode 100644 index 000000000000..469e9a47e92c --- /dev/null +++ b/proj4/src/pj_fwd.c @@ -0,0 +1,46 @@ +/* general forward projection */ +#define PJ_LIB__ +#include +#include +# define EPS 1.0e-12 + XY /* forward projection entry */ +pj_fwd(LP lp, PJ *P) { + XY xy; + double t; + + /* check for forward and latitude or longitude overange */ + if ((t = fabs(lp.phi)-M_HALFPI) > EPS || fabs(lp.lam) > 10.) { + xy.x = xy.y = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -14); + } else { /* proceed with projection */ + P->ctx->last_errno = 0; + pj_errno = 0; + errno = 0; + + if (fabs(t) <= EPS) + lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; + else if (P->geoc) + lp.phi = atan(P->rone_es * tan(lp.phi)); + lp.lam -= P->lam0; /* compute del lp.lam */ + if (!P->over) + lp.lam = adjlon(lp.lam); /* adjust del longitude */ + + /* Check for NULL pointer */ + if (P->fwd != NULL) + { + xy = (*P->fwd)(lp, P); /* project */ + if ( P->ctx->last_errno ) + xy.x = xy.y = HUGE_VAL; + /* adjust for major axis and easting/northings */ + else { + xy.x = P->fr_meter * (P->a * xy.x + P->x0); + xy.y = P->fr_meter * (P->a * xy.y + P->y0); + } + } + else + { + xy.x = xy.y = HUGE_VAL; + } + } + return xy; +} diff --git a/proj4/src/pj_fwd3d.c b/proj4/src/pj_fwd3d.c new file mode 100644 index 000000000000..63fc529ecb9f --- /dev/null +++ b/proj4/src/pj_fwd3d.c @@ -0,0 +1,47 @@ +/* general forward projection */ +#define PJ_LIB__ +#include +#include +# define EPS 1.0e-12 + XYZ /* forward projection entry */ +pj_fwd3d(LPZ lpz, PJ *P) { + XYZ xyz; + double t; + + /* check for forward and latitude or longitude overange */ + if ((t = fabs(lpz.phi)-M_HALFPI) > EPS || fabs(lpz.lam) > 10.) { + xyz.x = xyz.y = xyz.z = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -14); + } else { /* proceed with projection */ + P->ctx->last_errno = 0; + pj_errno = 0; + errno = 0; + + if (fabs(t) <= EPS) + lpz.phi = lpz.phi < 0. ? -M_HALFPI : M_HALFPI; + else if (P->geoc) /* Maybe redundant and never used. */ + lpz.phi = atan(P->rone_es * tan(lpz.phi)); + lpz.lam -= P->lam0; /* compute del lp.lam */ + if (!P->over) + lpz.lam = adjlon(lpz.lam); /* adjust del longitude */ + + /* Check for NULL pointer */ + if (P->fwd3d != NULL) + { + xyz = (*P->fwd3d)(lpz, P); /* project */ + if ( P->ctx->last_errno ) + xyz.x = xyz.y = xyz.z = HUGE_VAL; + /* adjust for major axis and easting/northings */ + else { + xyz.x = P->fr_meter * (P->a * xyz.x + P->x0); + xyz.y = P->fr_meter * (P->a * xyz.y + P->y0); + /* z is not scaled since this handled by vto_meter outside */ + } + } + else + { + xyz.x = xyz.y = xyz.z = HUGE_VAL; + } + } + return xyz; +} diff --git a/proj4/src/pj_gauss.c b/proj4/src/pj_gauss.c new file mode 100644 index 000000000000..67a1ab0746ef --- /dev/null +++ b/proj4/src/pj_gauss.c @@ -0,0 +1,93 @@ +/* +** libproj -- library of cartographic projections +** +** Copyright (c) 2003 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 PJ_LIB__ +#include + +#define MAX_ITER 20 + +struct GAUSS { + double C; + double K; + double e; + double ratexp; +}; +#define EN ((struct GAUSS *)en) +#define DEL_TOL 1e-14 + static double +srat(double esinp, double exp) { + return(pow((1.-esinp)/(1.+esinp), exp)); +} + + void * +pj_gauss_ini(double e, double phi0, double *chi, double *rc) { + double sphi, cphi, es; + struct GAUSS *en; + + if ((en = (struct GAUSS *)malloc(sizeof(struct GAUSS))) == NULL) + return (NULL); + es = e * e; + EN->e = e; + sphi = sin(phi0); + cphi = cos(phi0); cphi *= cphi; + *rc = sqrt(1. - es) / (1. - es * sphi * sphi); + EN->C = sqrt(1. + es * cphi * cphi / (1. - es)); + *chi = asin(sphi / EN->C); + EN->ratexp = 0.5 * EN->C * e; + EN->K = tan(.5 * *chi + M_FORTPI) / ( + pow(tan(.5 * phi0 + M_FORTPI), EN->C) * + srat(EN->e * sphi, EN->ratexp) ); + return ((void *)en); +} + LP +pj_gauss(projCtx ctx, LP elp, const void *en) { + LP slp; + (void) ctx; + + slp.phi = 2. * atan( EN->K * + pow(tan(.5 * elp.phi + M_FORTPI), EN->C) * + srat(EN->e * sin(elp.phi), EN->ratexp) ) - M_HALFPI; + slp.lam = EN->C * (elp.lam); + return(slp); +} + LP +pj_inv_gauss(projCtx ctx, LP slp, const void *en) { + LP elp; + double num; + int i; + + elp.lam = slp.lam / EN->C; + num = pow(tan(.5 * slp.phi + M_FORTPI)/EN->K, 1./EN->C); + for (i = MAX_ITER; i; --i) { + elp.phi = 2. * atan(num * srat(EN->e * sin(slp.phi), -.5 * EN->e)) + - M_HALFPI; + if (fabs(elp.phi - slp.phi) < DEL_TOL) break; + slp.phi = elp.phi; + } + /* convergence failed */ + if (!i) + pj_ctx_set_errno( ctx, -17 ); + return (elp); +} diff --git a/proj4/src/pj_gc_reader.c b/proj4/src/pj_gc_reader.c new file mode 100644 index 000000000000..458737c1c232 --- /dev/null +++ b/proj4/src/pj_gc_reader.c @@ -0,0 +1,207 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Code to read a grid catalog from a .cvs file. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2012, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +static int pj_gc_readentry(projCtx ctx, PAFile fid, PJ_GridCatalogEntry *entry); + +/************************************************************************/ +/* pj_gc_readcatalog() */ +/* */ +/* Read a grid catalog from a .csv file. */ +/************************************************************************/ + +PJ_GridCatalog *pj_gc_readcatalog( projCtx ctx, const char *catalog_name ) +{ + PAFile fid; + PJ_GridCatalog *catalog; + int entry_max; + char line[302]; + + fid = pj_open_lib( ctx, (char *) catalog_name, "r" ); + if (fid == NULL) + return NULL; + + /* discard title line */ + pj_ctx_fgets(ctx, line, sizeof(line)-1, fid); + + 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, fid, + 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; + } + } + + return 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, PAFile fid, + char **tokens, int max_tokens ) +{ + char line[302]; + + while( pj_ctx_fgets(ctx, line, sizeof(line)-1, fid) != 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 ) +{ + (void) ctx; + + 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 pj_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, PAFile fid, 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, fid, 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/proj4/src/pj_generic_selftest.c b/proj4/src/pj_generic_selftest.c new file mode 100644 index 000000000000..88b5c3082e97 --- /dev/null +++ b/proj4/src/pj_generic_selftest.c @@ -0,0 +1,197 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Generic regression test for PROJ.4 projection algorithms. + * Author: Thomas Knudsen + * + ****************************************************************************** + * Copyright (c) 2016, Thomas Knudsen + * + * 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 +#define PJ_LIB__ +#include + + +static int deviates_xy (XY expected, XY got, double tolerance); +static int deviates_lp (LP expected, LP got, double tolerance); +static XY pj_fwd_deg (LP in, PJ *P); + + +/**********************************************************************/ +int pj_generic_selftest ( +/**********************************************************************/ + char *e_args, + char *s_args, + double tolerance_xy, + double tolerance_lp, + int n_fwd, + int n_inv, + LP *fwd_in, + XY *e_fwd_expect, + XY *s_fwd_expect, + XY *inv_in, + LP *e_inv_expect, + LP *s_inv_expect +) { +/*********************************************************************** + +Generic regression test for PROJ.4 projection algorithms, testing both +ellipsoidal ("e_") and spheroidal ("s_") versions of the projection +algorithms in both forward ("_fwd_") and inverse ("_inv_") mode. + +Compares the "known good" results in and +with the actual results obtained by transforming the forward input data +set in with pj_fwd() using setup arguments and +, respectively. + +Then + +Compares the "known good" results in and +with the actual results obtained by transforming the inverse input data +set in with pj_inv() using setup arguments and +, respectively. + +Any of the pointers passed may be set to 0, indicating "don't test this +part". + +Returns 0 if all data agree to within the accuracy specified in + and . Non-zero otherwise. + +***********************************************************************/ + int i; + + PJ *P; + + if (e_args) { + P = pj_init_plus(e_args); + if (0==P) + return 2; + + /* Test forward ellipsoidal */ + if (e_fwd_expect) { + for (i = 0; i < n_fwd; i++) + if (deviates_xy (e_fwd_expect[i], pj_fwd_deg ( fwd_in[i], P ), tolerance_xy)) + break; + if ( i != n_fwd ) + return 100 + i; + } + + /* Test inverse ellipsoidal */ + if (e_inv_expect) { + for (i = 0; i < n_inv; i++) + if (deviates_lp (e_inv_expect[i], pj_inv ( inv_in[i], P ), tolerance_lp)) + break; + if ( i != n_inv ) + return 200 + i; + } + + pj_free (P); + } + + + if (s_args) { + P = pj_init_plus(s_args); + if (0==P) + return 3; + + /* Test forward spherical */ + if (s_fwd_expect) { + for (i = 0; i < n_fwd; i++) + if (deviates_xy (s_fwd_expect[i], pj_fwd_deg ( fwd_in[i], P ), tolerance_xy)) + break; + if ( i != n_fwd ) + return 300 + i; + } + + /* Test inverse spherical */ + if (s_inv_expect) { + for (i = 0; i < n_inv; i++) + if (deviates_lp (s_inv_expect[i], pj_inv ( inv_in[i], P ), tolerance_lp)) + break; + if ( i != n_inv ) + return 400 + i; + } + + pj_free (P); + } + + return 0; +} + + + +/**********************************************************************/ +static int deviates_xy (XY expected, XY got, double tolerance) { +/*********************************************************************** + + Determine whether two XYs deviate by more than . + + The test material ("expected" values) may contain coordinates that + are indeterminate. For those cases, we test the other coordinate + only by forcing expected and actual ("got") coordinates to 0. + +***********************************************************************/ + if (HUGE_VAL== expected.x) + return 0; + if (HUGE_VAL== expected.y) + return 0; + if (hypot ( expected.x - got.x, expected.y - got.y ) > tolerance) + return 1; + return 0; +} + + +/**********************************************************************/ +static int deviates_lp (LP expected, LP got, double tolerance) { +/*********************************************************************** + + Determine whether two LPs deviate by more than . + + This one is slightly tricky, since the LP is + supposed to be represented as degrees (since it was at some + time written down by a real human), whereas the LP is + represented in radians (since it is supposed to be the result + output from pj_inv) + +***********************************************************************/ + if (HUGE_VAL== expected.lam) + return 0; + if (HUGE_VAL== expected.phi) + return 0; + if (hypot ( DEG_TO_RAD * expected.lam - got.lam, DEG_TO_RAD * expected.phi - got.phi ) > tolerance) + return 1; + return 0; +} + + +/**********************************************************************/ +static XY pj_fwd_deg (LP in, PJ *P) { +/*********************************************************************** + + Wrapper for pj_fwd, accepting input in degrees. + +***********************************************************************/ + LP in_rad; + in_rad.lam = DEG_TO_RAD * in.lam; + in_rad.phi = DEG_TO_RAD * in.phi; + return pj_fwd (in_rad, P); +} diff --git a/proj4/src/pj_geocent.c b/proj4/src/pj_geocent.c new file mode 100644 index 000000000000..a00fc9915c22 --- /dev/null +++ b/proj4/src/pj_geocent.c @@ -0,0 +1,119 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Stub projection for geocentric. The transformation isn't + * really done here since this code is 2D. The real transformation + * is handled by pj_transform.c. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2002, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ +#include + +PROJ_HEAD(geocent, "Geocentric") "\n\t"; + +static XY forward(LP lp, PJ *P) { + XY xy = {0.0,0.0}; + (void) P; + xy.x = lp.lam; + xy.y = lp.phi; + return xy; +} + +static LP inverse(XY xy, PJ *P) { + LP lp = {0.0,0.0}; + (void) P; + lp.phi = xy.y; + lp.lam = xy.x; + return lp; +} + + +static void *freeup_new (PJ *P) { + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +PJ *PROJECTION(geocent) { + P->is_geocent = 1; + P->x0 = 0.0; + P->y0 = 0.0; + P->inv = inverse; + P->fwd = forward; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_geocent_selftest (void) {return 0;} +#else + +int pj_geocent_selftest (void) { + + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=geocent +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + char s_args[] = {"+proj=geocent +a=6400000 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222638.98158654713, 111319.49079327357}, + { 222638.98158654713, -111319.49079327357}, + {-222638.98158654713, 111319.49079327357}, + {-222638.98158654713, -111319.49079327357}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305682390426, 0.00089831528411952132}, + { 0.0017966305682390426, -0.00089831528411952132}, + {-0.0017966305682390426, 0.00089831528411952132}, + {-0.0017966305682390426, -0.00089831528411952132}, + }; + + return pj_generic_selftest (e_args, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + +#endif + diff --git a/proj4/src/pj_gridcatalog.c b/proj4/src/pj_gridcatalog.c new file mode 100644 index 000000000000..7954318570b1 --- /dev/null +++ b/proj4/src/pj_gridcatalog.c @@ -0,0 +1,281 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Code in support of grid catalogs + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2012, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +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 ) +{ + (void) 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; + (void) z; + + 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; + 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/proj4/src/pj_gridinfo.c b/proj4/src/pj_gridinfo.c new file mode 100644 index 000000000000..5f528de14837 --- /dev/null +++ b/proj4/src/pj_gridinfo.c @@ -0,0 +1,938 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Functions for handling individual PJ_GRIDINFO's. Includes + * loaders for all formats but CTABLE (in nad_init.c). + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include +#include + +#ifdef _WIN32_WCE +/* assert.h includes all Windows API headers and causes 'LP' name clash. + * Here assert we disable assert() for Windows CE. + * TODO - mloskot: re-implement porting friendly assert + */ +# define assert(exp) ((void)0) +#else +# include +#endif /* _WIN32_WCE */ + +/************************************************************************/ +/* swap_words() */ +/* */ +/* Convert the byte order of the given word(s) in place. */ +/************************************************************************/ + +static int byte_order_test = 1; +#define IS_LSB (1 == ((unsigned char *) (&byte_order_test))[0]) + +static void swap_words( unsigned char *data, int word_size, int word_count ) + +{ + int word; + + 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; + } +} + +/************************************************************************/ +/* pj_gridinfo_free() */ +/************************************************************************/ + +void pj_gridinfo_free( projCtx ctx, PJ_GRIDINFO *gi ) + +{ + if( gi == NULL ) + return; + + if( gi->child != NULL ) + { + PJ_GRIDINFO *child, *next; + + for( child = gi->child; child != NULL; child=next) + { + next=child->next; + pj_gridinfo_free( ctx, child ); + } + } + + if( gi->ct != NULL ) + nad_free( gi->ct ); + + free( gi->gridname ); + if( gi->filename != NULL ) + free( gi->filename ); + + pj_dalloc( gi ); +} + +/************************************************************************/ +/* pj_gridinfo_load() */ +/* */ +/* This function is intended to implement delayed loading of */ +/* the data contents of a grid file. The header and related */ +/* stuff are loaded by pj_gridinfo_init(). */ +/************************************************************************/ + +int pj_gridinfo_load( projCtx ctx, PJ_GRIDINFO *gi ) + +{ + struct CTABLE ct_tmp; + + if( gi == NULL || gi->ct == NULL ) + return 0; + + pj_acquire_lock(); + if( gi->ct->cvs != NULL ) + { + pj_release_lock(); + return 1; + } + + memcpy(&ct_tmp, gi->ct, sizeof(struct CTABLE)); + +/* -------------------------------------------------------------------- */ +/* Original platform specific CTable format. */ +/* -------------------------------------------------------------------- */ + if( strcmp(gi->format,"ctable") == 0 ) + { + PAFile fid; + int result; + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + result = nad_ctable_load( ctx, &ct_tmp, fid ); + + pj_ctx_fclose( ctx, fid ); + + gi->ct->cvs = ct_tmp.cvs; + pj_release_lock(); + + return result; + } + +/* -------------------------------------------------------------------- */ +/* CTable2 format. */ +/* -------------------------------------------------------------------- */ + else if( strcmp(gi->format,"ctable2") == 0 ) + { + PAFile fid; + int result; + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + result = nad_ctable2_load( ctx, &ct_tmp, fid ); + + pj_ctx_fclose( ctx, fid ); + + gi->ct->cvs = ct_tmp.cvs; + + pj_release_lock(); + return result; + } + +/* -------------------------------------------------------------------- */ +/* NTv1 format. */ +/* We process one line at a time. Note that the array storage */ +/* direction (e-w) is different in the NTv1 file and what */ +/* the CTABLE is supposed to have. The phi/lam are also */ +/* reversed, and we have to be aware of byte swapping. */ +/* -------------------------------------------------------------------- */ + else if( strcmp(gi->format,"ntv1") == 0 ) + { + double *row_buf; + int row; + PAFile fid; + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + pj_ctx_fseek( ctx, fid, gi->grid_offset, SEEK_SET ); + + row_buf = (double *) pj_malloc(gi->ct->lim.lam * sizeof(double) * 2); + ct_tmp.cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); + if( row_buf == NULL || ct_tmp.cvs == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + for( row = 0; row < gi->ct->lim.phi; row++ ) + { + int i; + FLP *cvs; + double *diff_seconds; + + if( pj_ctx_fread( ctx, row_buf, + sizeof(double), gi->ct->lim.lam * 2, fid ) + != (size_t)( 2 * gi->ct->lim.lam ) ) + { + pj_dalloc( row_buf ); + pj_dalloc( ct_tmp.cvs ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + if( IS_LSB ) + swap_words( (unsigned char *) row_buf, 8, gi->ct->lim.lam*2 ); + + /* convert seconds to radians */ + diff_seconds = row_buf; + + for( i = 0; i < gi->ct->lim.lam; i++ ) + { + cvs = ct_tmp.cvs + (row) * gi->ct->lim.lam + + (gi->ct->lim.lam - i - 1); + + cvs->phi = *(diff_seconds++) * ((M_PI/180.0) / 3600.0); + cvs->lam = *(diff_seconds++) * ((M_PI/180.0) / 3600.0); + } + } + + pj_dalloc( row_buf ); + + pj_ctx_fclose( ctx, fid ); + + gi->ct->cvs = ct_tmp.cvs; + pj_release_lock(); + + return 1; + } + +/* -------------------------------------------------------------------- */ +/* NTv2 format. */ +/* We process one line at a time. Note that the array storage */ +/* direction (e-w) is different in the NTv2 file and what */ +/* the CTABLE is supposed to have. The phi/lam are also */ +/* reversed, and we have to be aware of byte swapping. */ +/* -------------------------------------------------------------------- */ + else if( strcmp(gi->format,"ntv2") == 0 ) + { + float *row_buf; + int row; + PAFile fid; + + pj_log( ctx, PJ_LOG_DEBUG_MINOR, + "NTv2 - loading grid %s", gi->ct->id ); + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + pj_ctx_fseek( ctx, fid, gi->grid_offset, SEEK_SET ); + + row_buf = (float *) pj_malloc(gi->ct->lim.lam * sizeof(float) * 4); + ct_tmp.cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); + if( row_buf == NULL || ct_tmp.cvs == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + for( row = 0; row < gi->ct->lim.phi; row++ ) + { + int i; + FLP *cvs; + float *diff_seconds; + + if( pj_ctx_fread( ctx, row_buf, sizeof(float), + gi->ct->lim.lam*4, fid ) + != (size_t)( 4 * gi->ct->lim.lam ) ) + { + pj_dalloc( row_buf ); + pj_dalloc( ct_tmp.cvs ); + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + if( gi->must_swap ) + swap_words( (unsigned char *) row_buf, 4, + gi->ct->lim.lam*4 ); + + /* convert seconds to radians */ + diff_seconds = row_buf; + + for( i = 0; i < gi->ct->lim.lam; i++ ) + { + cvs = ct_tmp.cvs + (row) * gi->ct->lim.lam + + (gi->ct->lim.lam - i - 1); + + cvs->phi = *(diff_seconds++) * ((M_PI/180.0) / 3600.0); + cvs->lam = *(diff_seconds++) * ((M_PI/180.0) / 3600.0); + diff_seconds += 2; /* skip accuracy values */ + } + } + + pj_dalloc( row_buf ); + + pj_ctx_fclose( ctx, fid ); + + gi->ct->cvs = ct_tmp.cvs; + + pj_release_lock(); + return 1; + } + +/* -------------------------------------------------------------------- */ +/* GTX format. */ +/* -------------------------------------------------------------------- */ + else if( strcmp(gi->format,"gtx") == 0 ) + { + int words = gi->ct->lim.lam * gi->ct->lim.phi; + PAFile fid; + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + pj_ctx_fseek( ctx, fid, gi->grid_offset, SEEK_SET ); + + ct_tmp.cvs = (FLP *) pj_malloc(words*sizeof(float)); + if( ct_tmp.cvs == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return 0; + } + + if( pj_ctx_fread( ctx, ct_tmp.cvs, sizeof(float), words, fid ) + != (size_t)words ) + { + pj_dalloc( ct_tmp.cvs ); + pj_release_lock(); + return 0; + } + + if( IS_LSB ) + swap_words( (unsigned char *) ct_tmp.cvs, 4, words ); + + pj_ctx_fclose( ctx, fid ); + gi->ct->cvs = ct_tmp.cvs; + pj_release_lock(); + return 1; + } + + else + { + pj_release_lock(); + return 0; + } +} + +/************************************************************************/ +/* pj_gridinfo_parent() */ +/* */ +/* Seek a parent grid file by name from a grid list */ +/************************************************************************/ + +static PJ_GRIDINFO* pj_gridinfo_parent( PJ_GRIDINFO *gilist, + const char *name, int length ) +{ + while( gilist ) + { + if( strncmp(gilist->ct->id,name,length) == 0 ) return gilist; + if( gilist->child ) + { + PJ_GRIDINFO *parent=pj_gridinfo_parent( gilist->child, name, length ); + if( parent ) return parent; + } + gilist=gilist->next; + } + return gilist; +} + +/************************************************************************/ +/* pj_gridinfo_init_ntv2() */ +/* */ +/* Load a ntv2 (.gsb) file. */ +/************************************************************************/ + +static int pj_gridinfo_init_ntv2( projCtx ctx, PAFile fid, PJ_GRIDINFO *gilist ) +{ + unsigned char header[11*16]; + int num_subfiles, subfile; + int must_swap; + + 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 pj_gridinfo_init_ntv2()" ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Read the overview header. */ +/* -------------------------------------------------------------------- */ + if( pj_ctx_fread( ctx, header, sizeof(header), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + if( header[8] == 11 ) + must_swap = !IS_LSB; + else + must_swap = IS_LSB; + +/* -------------------------------------------------------------------- */ +/* Byte swap interesting fields if needed. */ +/* -------------------------------------------------------------------- */ + if( must_swap ) + { + swap_words( header+8, 4, 1 ); + swap_words( header+8+16, 4, 1 ); + swap_words( header+8+32, 4, 1 ); + swap_words( header+8+7*16, 8, 1 ); + swap_words( header+8+8*16, 8, 1 ); + swap_words( header+8+9*16, 8, 1 ); + swap_words( header+8+10*16, 8, 1 ); + } + +/* -------------------------------------------------------------------- */ +/* Get the subfile count out ... all we really use for now. */ +/* -------------------------------------------------------------------- */ + memcpy( &num_subfiles, header+8+32, 4 ); + +/* ==================================================================== */ +/* Step through the subfiles, creating a PJ_GRIDINFO for each. */ +/* ==================================================================== */ + for( subfile = 0; subfile < num_subfiles; subfile++ ) + { + struct CTABLE *ct; + LP ur; + int gs_count; + PJ_GRIDINFO *gi; + +/* -------------------------------------------------------------------- */ +/* Read header. */ +/* -------------------------------------------------------------------- */ + if( pj_ctx_fread( ctx, header, sizeof(header), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + if( strncmp((const char *) header,"SUB_NAME",8) != 0 ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Byte swap interesting fields if needed. */ +/* -------------------------------------------------------------------- */ + if( must_swap ) + { + swap_words( header+8+16*4, 8, 1 ); + swap_words( header+8+16*5, 8, 1 ); + swap_words( header+8+16*6, 8, 1 ); + swap_words( header+8+16*7, 8, 1 ); + swap_words( header+8+16*8, 8, 1 ); + swap_words( header+8+16*9, 8, 1 ); + swap_words( header+8+16*10, 4, 1 ); + } + +/* -------------------------------------------------------------------- */ +/* Initialize a corresponding "ct" structure. */ +/* -------------------------------------------------------------------- */ + ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); + strncpy( ct->id, (const char *) header + 8, 8 ); + ct->id[8] = '\0'; + + ct->ll.lam = - *((double *) (header+7*16+8)); /* W_LONG */ + ct->ll.phi = *((double *) (header+4*16+8)); /* S_LAT */ + + ur.lam = - *((double *) (header+6*16+8)); /* E_LONG */ + ur.phi = *((double *) (header+5*16+8)); /* N_LAT */ + + ct->del.lam = *((double *) (header+9*16+8)); + ct->del.phi = *((double *) (header+8*16+8)); + + 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; + + 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; + ct->del.phi *= DEG_TO_RAD/3600.0; + + memcpy( &gs_count, header + 8 + 16*10, 4 ); + if( gs_count != ct->lim.lam * ct->lim.phi ) + { + 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; + } + + ct->cvs = NULL; + +/* -------------------------------------------------------------------- */ +/* Create a new gridinfo for this if we aren't processing the */ +/* 1st subfile, and initialize our grid info. */ +/* -------------------------------------------------------------------- */ + if( subfile == 0 ) + gi = gilist; + else + { + gi = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); + memset( gi, 0, sizeof(PJ_GRIDINFO) ); + + gi->gridname = strdup( gilist->gridname ); + gi->filename = strdup( gilist->filename ); + gi->next = NULL; + } + + gi->must_swap = must_swap; + gi->ct = ct; + gi->format = "ntv2"; + gi->grid_offset = pj_ctx_ftell( ctx, fid ); + +/* -------------------------------------------------------------------- */ +/* Attach to the correct list or sublist. */ +/* -------------------------------------------------------------------- */ + if( strncmp((const char *)header+24,"NONE",4) == 0 ) + { + if( gi != gilist ) + { + PJ_GRIDINFO *lnk; + + for( lnk = gilist; lnk->next != NULL; lnk = lnk->next ) {} + lnk->next = gi; + } + } + + else + { + PJ_GRIDINFO *lnk; + PJ_GRIDINFO *gp = pj_gridinfo_parent(gilist, + (const char*)header+24,8); + + if( gp == NULL ) + { + 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 = gilist; lnk->next != NULL; lnk = lnk->next ) {} + lnk->next = gi; + } + else + { + if( gp->child == NULL ) + { + gp->child = gi; + } + else + { + for( lnk = gp->child; lnk->next != NULL; lnk = lnk->next ) {} + lnk->next = gi; + } + } + } + +/* -------------------------------------------------------------------- */ +/* Seek past the data. */ +/* -------------------------------------------------------------------- */ + pj_ctx_fseek( ctx, fid, gs_count * 16, SEEK_CUR ); + } + + return 1; +} + +/************************************************************************/ +/* pj_gridinfo_init_ntv1() */ +/* */ +/* Load an NTv1 style Canadian grid shift file. */ +/************************************************************************/ + +static int pj_gridinfo_init_ntv1( projCtx ctx, PAFile fid, PJ_GRIDINFO *gi ) + +{ + unsigned char header[176]; + struct CTABLE *ct; + LP ur; + + 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_ntv1()" ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Read the header. */ +/* -------------------------------------------------------------------- */ + if( pj_ctx_fread( ctx, header, sizeof(header), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Regularize fields of interest. */ +/* -------------------------------------------------------------------- */ + if( IS_LSB ) + { + swap_words( header+8, 4, 1 ); + swap_words( header+24, 8, 1 ); + swap_words( header+40, 8, 1 ); + swap_words( header+56, 8, 1 ); + swap_words( header+72, 8, 1 ); + swap_words( header+88, 8, 1 ); + swap_words( header+104, 8, 1 ); + } + + if( *((int *) (header+8)) != 12 ) + { + pj_log( ctx, PJ_LOG_ERROR, + "NTv1 grid shift file has wrong record count, corrupt?" ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Fill in CTABLE structure. */ +/* -------------------------------------------------------------------- */ + ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); + strcpy( ct->id, "NTv1 Grid Shift File" ); + + ct->ll.lam = - *((double *) (header+72)); + ct->ll.phi = *((double *) (header+24)); + ur.lam = - *((double *) (header+56)); + ur.phi = *((double *) (header+40)); + ct->del.lam = *((double *) (header+104)); + ct->del.phi = *((double *) (header+88)); + 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; + + 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; + ct->del.lam *= DEG_TO_RAD; + ct->del.phi *= DEG_TO_RAD; + ct->cvs = NULL; + + gi->ct = ct; + gi->grid_offset = pj_ctx_ftell( ctx, fid ); + gi->format = "ntv1"; + + return 1; +} + +/************************************************************************/ +/* pj_gridinfo_init_gtx() */ +/* */ +/* Load a NOAA .gtx vertical datum shift file. */ +/************************************************************************/ + +static int pj_gridinfo_init_gtx( projCtx ctx, PAFile 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( pj_ctx_fread( ctx, 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 */ +/* returning a list of PJ_GRIDINFOs for the grids in that */ +/* file. This superceeds use of nad_init() for modern */ +/* applications. */ +/************************************************************************/ + +PJ_GRIDINFO *pj_gridinfo_init( projCtx ctx, const char *gridname ) + +{ + char fname[MAX_PATH_FILENAME+1]; + PJ_GRIDINFO *gilist; + PAFile fp; + char header[160]; + + errno = pj_errno = 0; + ctx->last_errno = 0; + +/* -------------------------------------------------------------------- */ +/* Initialize a GRIDINFO with stub info we would use if it */ +/* cannot be loaded. */ +/* -------------------------------------------------------------------- */ + gilist = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); + memset( gilist, 0, sizeof(PJ_GRIDINFO) ); + + gilist->gridname = strdup( gridname ); + gilist->filename = NULL; + gilist->format = "missing"; + gilist->grid_offset = 0; + gilist->ct = NULL; + gilist->next = NULL; + +/* -------------------------------------------------------------------- */ +/* Open the file using the usual search rules. */ +/* -------------------------------------------------------------------- */ + strcpy(fname, gridname); + if (!(fp = pj_open_lib(ctx, fname, "rb"))) { + ctx->last_errno = 0; /* don't treat as a persistent error */ + return gilist; + } + + gilist->filename = strdup(fname); + +/* -------------------------------------------------------------------- */ +/* Load a header, to determine the file type. */ +/* -------------------------------------------------------------------- */ + if( pj_ctx_fread( ctx, header, sizeof(header), 1, fp ) != 1 ) + { + /* some files may be smaller that sizeof(header), eg 160, so */ + ctx->last_errno = 0; /* don't treat as a persistent error */ + } + + pj_ctx_fseek( ctx, fp, SEEK_SET, 0 ); + +/* -------------------------------------------------------------------- */ +/* Determine file type. */ +/* -------------------------------------------------------------------- */ + if( strncmp(header + 0, "HEADER", 6) == 0 + && strncmp(header + 96, "W GRID", 6) == 0 + && strncmp(header + 144, "TO NAD83 ", 16) == 0 ) + { + 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( 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( ctx, fp ); + if (ct == NULL) + { + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + "CTABLE ct is NULL."); + } else + { + gilist->format = "ctable"; + gilist->ct = ct; + + 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 ); + } + } + + pj_ctx_fclose(ctx, fp); + + return gilist; +} diff --git a/proj4/src/pj_gridlist.c b/proj4/src/pj_gridlist.c new file mode 100644 index 000000000000..a54dbe6f0e3a --- /dev/null +++ b/proj4/src/pj_gridlist.c @@ -0,0 +1,223 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Code to manage the list of currently loaded (cached) PJ_GRIDINFOs + * See pj_gridinfo.c for details of loading individual grids. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +#ifdef _WIN32_WCE +/* assert.h includes all Windows API headers and causes 'LP' name clash. + * Here assert we disable assert() for Windows CE. + * TODO - mloskot: re-implement porting friendly assert + */ +# define assert(exp) ((void)0) +#else +# include +#endif /* _WIN32_WCE */ + +static PJ_GRIDINFO *grid_list = NULL; +#define PJ_MAX_PATH_LENGTH 1024 + +/************************************************************************/ +/* pj_deallocate_grids() */ +/* */ +/* Deallocate all loaded grids. */ +/************************************************************************/ + +void pj_deallocate_grids() + +{ + while( grid_list != NULL ) + { + PJ_GRIDINFO *item = grid_list; + grid_list = grid_list->next; + item->next = NULL; + + pj_gridinfo_free( pj_get_default_ctx(), item ); + } +} + +/************************************************************************/ +/* pj_gridlist_merge_grid() */ +/* */ +/* Find/load the named gridfile and merge it into the */ +/* last_nadgrids_list. */ +/************************************************************************/ + +static int pj_gridlist_merge_gridfile( projCtx ctx, + const char *gridname, + PJ_GRIDINFO ***p_gridlist, + int *p_gridcount, + int *p_gridmax ) + +{ + int got_match=0; + PJ_GRIDINFO *this_grid, *tail = NULL; + +/* -------------------------------------------------------------------- */ +/* Try to find in the existing list of loaded grids. Add all */ +/* matching grids as with NTv2 we can get many grids from one */ +/* file (one shared gridname). */ +/* -------------------------------------------------------------------- */ + for( this_grid = grid_list; this_grid != NULL; this_grid = this_grid->next) + { + if( strcmp(this_grid->gridname,gridname) == 0 ) + { + got_match = 1; + + /* dont add to the list if it is invalid. */ + if( this_grid->ct == NULL ) + return 0; + + /* do we need to grow the list? */ + if( *p_gridcount >= *p_gridmax - 2 ) + { + PJ_GRIDINFO **new_list; + int new_max = *p_gridmax + 20; + + new_list = (PJ_GRIDINFO **) pj_malloc(sizeof(void*) * new_max); + if( *p_gridlist != NULL ) + { + memcpy( new_list, *p_gridlist, + sizeof(void*) * (*p_gridmax) ); + pj_dalloc( *p_gridlist ); + } + + *p_gridlist = new_list; + *p_gridmax = new_max; + } + + /* add to the list */ + (*p_gridlist)[(*p_gridcount)++] = this_grid; + (*p_gridlist)[*p_gridcount] = NULL; + } + + tail = this_grid; + } + + if( got_match ) + return 1; + +/* -------------------------------------------------------------------- */ +/* Try to load the named grid. */ +/* -------------------------------------------------------------------- */ + this_grid = pj_gridinfo_init( ctx, gridname ); + + if( this_grid == NULL ) + { + /* we should get at least a stub grid with a missing "ct" member */ + assert( FALSE ); + return 0; + } + + if( tail != NULL ) + tail->next = this_grid; + else + grid_list = this_grid; + +/* -------------------------------------------------------------------- */ +/* Recurse to add the grid now that it is loaded. */ +/* -------------------------------------------------------------------- */ + return pj_gridlist_merge_gridfile( ctx, gridname, p_gridlist, + p_gridcount, p_gridmax ); +} + +/************************************************************************/ +/* pj_gridlist_from_nadgrids() */ +/* */ +/* This functions loads the list of grids corresponding to a */ +/* particular nadgrids string into a list, and returns it. The */ +/* list is kept around till a request is made with a different */ +/* string in order to cut down on the string parsing cost, and */ +/* the cost of building the list of tables each time. */ +/************************************************************************/ + +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(); + +/* -------------------------------------------------------------------- */ +/* Loop processing names out of nadgrids one at a time. */ +/* -------------------------------------------------------------------- */ + for( s = nadgrids; *s != '\0'; ) + { + size_t end_char; + int required = 1; + char name[PJ_MAX_PATH_LENGTH]; + + if( *s == '@' ) + { + required = 0; + s++; + } + + for( end_char = 0; + s[end_char] != '\0' && s[end_char] != ','; + end_char++ ) {} + + if( end_char >= sizeof(name) ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return NULL; + } + + strncpy( name, s, end_char ); + name[end_char] = '\0'; + + s += end_char; + if( *s == ',' ) + s++; + + if( !pj_gridlist_merge_gridfile( ctx, name, &gridlist, grid_count, + &grid_max) + && required ) + { + pj_ctx_set_errno( ctx, -38 ); + pj_release_lock(); + return NULL; + } + else + pj_errno = 0; + } + + pj_release_lock(); + + return gridlist; +} diff --git a/proj4/src/pj_init.c b/proj4/src/pj_init.c new file mode 100644 index 000000000000..79b64bb3b7c4 --- /dev/null +++ b/proj4/src/pj_init.c @@ -0,0 +1,665 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Initialize projection object from string definition. Includes + * pj_init(), pj_init_plus() and pj_free() function. + * Author: Gerald Evenden, Frank Warmerdam + * + ****************************************************************************** + * Copyright (c) 1995, Gerald Evenden + * Copyright (c) 2002, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ +#include +#include +#include +#include +#include + +typedef struct { + projCtx ctx; + PAFile fid; + char buffer[8193]; + int buffer_filled; + int at_eof; +} pj_read_state; + +/************************************************************************/ +/* fill_buffer() */ +/************************************************************************/ + +static const char *fill_buffer(pj_read_state *state, const char *last_char) +{ + size_t bytes_read; + size_t char_remaining, char_requested; + +/* -------------------------------------------------------------------- */ +/* Don't bother trying to read more if we are at eof, or if the */ +/* buffer is still over half full. */ +/* -------------------------------------------------------------------- */ + if (last_char == NULL) + last_char = state->buffer; + + if (state->at_eof) + return last_char; + + char_remaining = state->buffer_filled - (last_char - state->buffer); + if (char_remaining >= sizeof(state->buffer) / 2) + return last_char; + +/* -------------------------------------------------------------------- */ +/* Move the existing data to the start of the buffer. */ +/* -------------------------------------------------------------------- */ + memmove(state->buffer, last_char, char_remaining); + state->buffer_filled = char_remaining; + last_char = state->buffer; + +/* -------------------------------------------------------------------- */ +/* Refill. */ +/* -------------------------------------------------------------------- */ + char_requested = sizeof(state->buffer) - state->buffer_filled - 1; + bytes_read = pj_ctx_fread( state->ctx, state->buffer + state->buffer_filled, + 1, char_requested, state->fid ); + if (bytes_read < char_requested) + { + state->at_eof = 1; + state->buffer[state->buffer_filled + bytes_read] = '\0'; + } + + state->buffer_filled += bytes_read; + return last_char; +} + +/************************************************************************/ +/* get_opt() */ +/************************************************************************/ +static paralist * +get_opt(projCtx ctx, paralist **start, PAFile fid, char *name, paralist *next, + int *found_def) { + pj_read_state *state = (pj_read_state*) calloc(1,sizeof(pj_read_state)); + char sword[302]; + int len; + int in_target = 0; + const char *next_char = NULL; + + state->fid = fid; + state->ctx = ctx; + next_char = fill_buffer(state, NULL); + if(found_def) + *found_def = 0; + + len = strlen(name); + *sword = 't'; + + /* loop till we find our target keyword */ + while (*next_char) + { + next_char = fill_buffer(state, next_char); + + /* Skip white space. */ + while( isspace(*next_char) ) + next_char++; + + next_char = fill_buffer(state, next_char); + + /* for comments, skip past end of line. */ + if( *next_char == '#' ) + { + while( *next_char && *next_char != '\n' ) + next_char++; + + next_char = fill_buffer(state, next_char); + if (*next_char == '\n') + next_char++; + if (*next_char == '\r') + next_char++; + + } + + /* Is this our target? */ + else if( *next_char == '<' ) + { + /* terminate processing target on the next block definition */ + if (in_target) + break; + + next_char++; + if (strncmp(name, next_char, len) == 0 + && next_char[len] == '>') + { + /* skip past target word */ + next_char += len + 1; + in_target = 1; + if(found_def) + *found_def = 1; + } + else + { + /* skip past end of line */ + while( *next_char && *next_char != '\n' ) + next_char++; + } + } + else if (in_target) + { + const char *start_of_word = next_char; + int word_len = 0; + + if (*start_of_word == '+') + { + start_of_word++; + next_char++; + } + + /* capture parameter */ + while( *next_char && !isspace(*next_char) ) + { + next_char++; + word_len++; + } + + strncpy(sword+1, start_of_word, word_len); + sword[word_len+1] = '\0'; + + /* do not override existing parameter value of same name */ + if (!pj_param(ctx, *start, sword).i) { + /* don't default ellipse if datum, ellps or any earth model + information is set. */ + if( strncmp(sword+1,"ellps=",6) != 0 + || (!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(sword+1); + } + } + + } + else + { + /* skip past word */ + while( *next_char && !isspace(*next_char) ) + next_char++; + + } + } + + if (errno == 25) + errno = 0; + + free(state); + + return next; +} + +/************************************************************************/ +/* get_defaults() */ +/************************************************************************/ +static paralist * +get_defaults(projCtx ctx, paralist **start, paralist *next, char *name) { + PAFile fid; + + if ( (fid = pj_open_lib(ctx,"proj_def.dat", "rt")) != NULL) { + next = get_opt(ctx, start, fid, "general", next, NULL); + pj_ctx_fseek(ctx, fid, 0, SEEK_SET); + next = get_opt(ctx, start, fid, name, next, NULL); + pj_ctx_fclose(ctx, 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(projCtx ctx, paralist **start, paralist *next, char *name, + int *found_def) { + char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; + PAFile 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; + *found_def = 1; + 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, found_def); + else + return NULL; + pj_ctx_fclose(ctx, 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; +} + +/************************************************************************/ +/* pj_init_plus() */ +/* */ +/* Same as pj_init() except it takes one argument string with */ +/* individual arguments preceeded by '+', such as "+proj=utm */ +/* +zone=11 +ellps=WGS84". */ +/************************************************************************/ + +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, blank_count = 0; + PJ *result = NULL; + + /* make a copy that we can manipulate */ + defn_copy = (char *) pj_malloc( strlen(definition)+1 ); + strcpy( defn_copy, 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' || 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_ctx_set_errno( ctx, -44 ); + goto bum_call; + } + + argv[argc++] = defn_copy + i + 1; + } + break; + + case ' ': + case '\t': + case '\n': + /* 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: + /* 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_ctx( ctx, argc, argv ); + +bum_call: + pj_dalloc( defn_copy ); + + return result; +} + +/************************************************************************/ +/* pj_init() */ +/* */ +/* Main entry point for initialing a PJ projections */ +/* definition. Note that the projection specific function is */ +/* called to do the initial allocation so it can be created */ +/* large enough to hold projection specific parameters. */ +/************************************************************************/ + +PJ * +pj_init(int argc, char **argv) { + 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; + + ctx->last_errno = 0; + start = NULL; + + /* put arguments into internal linked list */ + if (argc <= 0) { pj_ctx_set_errno( ctx, -1 ); goto bum_call; } + start = curr = pj_mkparam(argv[0]); + for (i = 1; i < argc; ++i) { + curr->next = pj_mkparam(argv[i]); + curr = curr->next; + } + if (ctx->last_errno) goto bum_call; + + /* check if +init present */ + if (pj_param(ctx, start, "tinit").i) { + int found_def = 0; + + if (!(curr = get_init(ctx,&start, curr, + pj_param(ctx, start, "sinit").s, + &found_def))) + goto bum_call; + if (!found_def) { 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 ) + { + pj_ctx_set_errno( ctx, PJD_ERR_AXIS ); + goto bum_call; + } + + 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 = pj_strtod(s, &s); + if (*s == '/') /* ratio number */ + PIN->to_meter /= pj_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 = pj_strtod(s, &s); + if (*s == '/') /* ratio number */ + PIN->vto_meter /= pj_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 ) + { + value = pj_prime_meridians[i].defn; + break; + } + } + + 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 + for ( ; start; start = curr) { + curr = start->next; + pj_dalloc(start); + } + PIN = 0; + } + + return PIN; +} + +/************************************************************************/ +/* pj_free() */ +/* */ +/* This is the application callable entry point for destroying */ +/* a projection definition. It does work generic to all */ +/* projection types, and then calls the projection specific */ +/* free function (P->pfree()) to do local work. This maps to */ +/* the FREEUP code in the individual projection source files. */ +/************************************************************************/ + +void +pj_free(PJ *P) { + if (P) { + paralist *t, *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); + } +} + + + + + + + + +/************************************************************************/ +/* pj_prepare() */ +/* */ +/* Helper function for the PJ_xxxx functions providing the */ +/* projection specific setup for each projection type. */ +/* */ +/* Currently not used, but placed here as part of the material */ +/* Demonstrating the idea for a future PJ_xxx architecture */ +/* (cf. pj_minimal.c) */ +/* */ +/************************************************************************/ +void pj_prepare (PJ *P, const char *description, void (*freeup)(struct PJconsts *), size_t sizeof_struct_opaque) { + P->descr = description; + P->pfree = freeup; + P->opaque = pj_calloc (1, sizeof_struct_opaque); +} diff --git a/proj4/src/pj_initcache.c b/proj4/src/pj_initcache.c new file mode 100644 index 000000000000..e36b0abc7f54 --- /dev/null +++ b/proj4/src/pj_initcache.c @@ -0,0 +1,177 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: init file definition cache. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2009, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include + +static int cache_count = 0; +static int cache_alloc = 0; +static char **cache_key = NULL; +static paralist **cache_paralist = NULL; + +/************************************************************************/ +/* pj_clone_paralist() */ +/* */ +/* Allocate a copy of a parameter list. */ +/************************************************************************/ + +paralist *pj_clone_paralist( const paralist *list) +{ + paralist *list_copy = NULL, *next_copy = NULL; + + for( ; list != NULL; list = list->next ) + { + paralist *newitem = (paralist *) + pj_malloc(sizeof(paralist) + strlen(list->param)); + + newitem->used = 0; + newitem->next = 0; + strcpy( newitem->param, list->param ); + + if( list_copy == NULL ) + list_copy = newitem; + else + next_copy->next = newitem; + + next_copy = newitem; + } + + return list_copy; +} + +/************************************************************************/ +/* pj_clear_initcache() */ +/* */ +/* Clear out all memory held in the init file cache. */ +/************************************************************************/ + +void pj_clear_initcache() +{ + if( cache_alloc > 0 ) + { + int i; + + pj_acquire_lock(); + + 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_search_initcache() */ +/* */ +/* Search for a matching definition in the init cache. */ +/************************************************************************/ + +paralist *pj_search_initcache( const char *filekey ) + +{ + int i; + paralist *result = NULL; + + pj_acquire_lock(); + + for( i = 0; result == NULL && i < cache_count; i++) + { + if( strcmp(filekey,cache_key[i]) == 0 ) + { + result = pj_clone_paralist( cache_paralist[i] ); + } + } + + pj_release_lock(); + + return result; +} + +/************************************************************************/ +/* pj_insert_initcache() */ +/* */ +/* Insert a paralist definition in the init file cache. */ +/************************************************************************/ + +void pj_insert_initcache( const char *filekey, const paralist *list ) + +{ + pj_acquire_lock(); + + /* + ** 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_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 ); + + cache_paralist[cache_count] = pj_clone_paralist( list ); + + cache_count++; + + pj_release_lock(); +} + diff --git a/proj4/src/pj_inv.c b/proj4/src/pj_inv.c new file mode 100644 index 000000000000..9a3417697c03 --- /dev/null +++ b/proj4/src/pj_inv.c @@ -0,0 +1,42 @@ +/* general inverse projection */ +#define PJ_LIB__ +#include +#include +# define EPS 1.0e-12 + LP /* inverse projection entry */ +pj_inv(XY xy, PJ *P) { + LP lp; + + /* can't do as much preliminary checking as with forward */ + if (xy.x == HUGE_VAL || xy.y == HUGE_VAL) { + lp.lam = lp.phi = HUGE_VAL; + pj_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; + + /* Check for NULL pointer */ + if (P->inv != NULL) + { + lp = (*P->inv)(xy, P); /* inverse project */ + if (P->ctx->last_errno ) + lp.lam = lp.phi = HUGE_VAL; + else { + lp.lam += P->lam0; /* reduce from del lp.lam */ + if (!P->over) + lp.lam = adjlon(lp.lam); /* adjust longitude to CM */ + if (P->geoc && fabs(fabs(lp.phi)-M_HALFPI) > EPS) + lp.phi = atan(P->one_es * tan(lp.phi)); + } + } + else + { + lp.lam = lp.phi = HUGE_VAL; + } + return lp; +} diff --git a/proj4/src/pj_inv3d.c b/proj4/src/pj_inv3d.c new file mode 100644 index 000000000000..bf6a9324d7a4 --- /dev/null +++ b/proj4/src/pj_inv3d.c @@ -0,0 +1,45 @@ +/* general inverse projection */ +#define PJ_LIB__ +#include +#include +# define EPS 1.0e-12 + LPZ /* inverse projection entry */ +pj_inv3d(XYZ xyz, PJ *P) { + LPZ lpz; + + /* can't do as much preliminary checking as with forward */ + if (xyz.x == HUGE_VAL || xyz.y == HUGE_VAL || xyz.z == HUGE_VAL ) { + lpz.lam = lpz.phi = lpz.z = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -15); + return lpz; + } + + errno = pj_errno = 0; + P->ctx->last_errno = 0; + + xyz.x = (xyz.x * P->to_meter - P->x0) * P->ra; /* descale and de-offset */ + xyz.y = (xyz.y * P->to_meter - P->y0) * P->ra; + /* z is not scaled since that is handled by vto_meter before we get here */ + + /* Check for NULL pointer */ + if (P->inv3d != NULL) + { + lpz = (*P->inv3d)(xyz, P); /* inverse project */ + if (P->ctx->last_errno ) + lpz.lam = lpz.phi = lpz.z = HUGE_VAL; + else { + lpz.lam += P->lam0; /* reduce from del lp.lam */ + if (!P->over) + lpz.lam = adjlon(lpz.lam); /* adjust longitude to CM */ + + /* This may be redundant and never used */ + if (P->geoc && fabs(fabs(lpz.phi)-M_HALFPI) > EPS) + lpz.phi = atan(P->one_es * tan(lpz.phi)); + } + } + else + { + lpz.lam = lpz.phi = lpz.z = HUGE_VAL; + } + return lpz; +} diff --git a/proj4/src/pj_latlong.c b/proj4/src/pj_latlong.c new file mode 100644 index 000000000000..761eadc5b054 --- /dev/null +++ b/proj4/src/pj_latlong.c @@ -0,0 +1,122 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Stub projection implementation for lat/long coordinates. We + * don't actually change the coordinates, but we want proj=latlong + * to act sort of like a projection. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2000, 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. + *****************************************************************************/ + +/* very loosely based upon DMA code by Bradford W. Drew */ +#define PJ_LIB__ +#include + +PROJ_HEAD(lonlat, "Lat/long (Geodetic)") "\n\t"; +PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") "\n\t"; +PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") "\n\t"; +PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") "\n\t"; + + + static XY forward(LP lp, PJ *P) { + XY xy = {0.0,0.0}; + xy.x = lp.lam / P->a; + xy.y = lp.phi / P->a; + return xy; +} + + +static LP inverse(XY xy, PJ *P) { + LP lp = {0.0,0.0}; + lp.phi = xy.y * P->a; + lp.lam = xy.x * P->a; + return lp; +} + + +static void *freeup_new (PJ *P) { + if (0==P) + return 0; + + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(latlong) { + P->is_latlong = 1; + P->x0 = 0.0; + P->y0 = 0.0; + P->inv = inverse; + P->fwd = forward; + + return P; +} + + +PJ *PROJECTION(longlat) { + P->is_latlong = 1; + P->x0 = 0.0; + P->y0 = 0.0; + P->inv = inverse; + P->fwd = forward; + + return P; +} + + +PJ *PROJECTION(latlon) { + P->is_latlong = 1; + P->x0 = 0.0; + P->y0 = 0.0; + P->inv = inverse; + P->fwd = forward; + + return P; +} + + +PJ *PROJECTION(lonlat) { + P->is_latlong = 1; + P->x0 = 0.0; + P->y0 = 0.0; + P->inv = inverse; P->fwd = forward; + + return P; +} + + +/* Bogus self-test functions. Self-tests can't be implemented the usual way for + * these "projections" since they can't be used directly from proj. + * We still need them though, as all projections are automatically added to + * the list of self-test functions. + * + * The code should be covered by the tests in nad/. + * */ +int pj_latlong_selftest (void) {return 0;} +int pj_longlat_selftest (void) {return 0;} +int pj_latlon_selftest (void) {return 0;} +int pj_lonlat_selftest (void) {return 0;} diff --git a/proj4/src/pj_list.c b/proj4/src/pj_list.c new file mode 100644 index 000000000000..9fde000f6b45 --- /dev/null +++ b/proj4/src/pj_list.c @@ -0,0 +1,55 @@ +/* Projection System: default list of projections +** Use local definition of PJ_LIST_H for subset. +*/ + +#define USE_PJ_LIST_H 1 +#include "projects.h" + + + +#define PASTE(a,b) a##b + +/* Generate prototypes for projection functions */ +#define PROJ_HEAD(id, name) struct PJconsts *pj_##id(struct PJconsts*); +#include "pj_list.h" +#undef PROJ_HEAD + +/* Generate prototypes for projection selftest functions */ +#define PROJ_HEAD(id, name) int PASTE(pj_##id, _selftest) (void); +#include "pj_list.h" +#undef PROJ_HEAD + + +/* Generate extern declarations for description strings */ +#define PROJ_HEAD(id, name) extern char * const pj_s_##id; +#include "pj_list.h" +#undef PROJ_HEAD + + +/* Generate the null-terminated list of projection functions with associated mnemonics and descriptions */ +#define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id}, +struct PJ_LIST pj_list[] = { +#include "pj_list.h" + {0, 0, 0}, + }; +#undef PROJ_HEAD + + +/* Generate the null-terminated list of projection selftest functions with associated mnemonics */ +#define PROJ_HEAD(id, name) {#id, PASTE(pj_##id, _selftest)}, +struct PJ_SELFTEST_LIST pj_selftest_list[] = { +#include "pj_list.h" + {0, 0}, + }; +#undef PROJ_HEAD +#undef PASTE + + +struct PJ_LIST *pj_get_list_ref (void) { + return pj_list; +} + + +struct PJ_SELFTEST_LIST *pj_get_selftest_list_ref (void) { + return pj_selftest_list; +} diff --git a/proj4/src/pj_list.h b/proj4/src/pj_list.h new file mode 100644 index 000000000000..454c0a3c0dae --- /dev/null +++ b/proj4/src/pj_list.h @@ -0,0 +1,150 @@ +#ifdef DO_PJ_LIST_ID +static const char PJ_LIST_H_ID[] = "@(#)pj_list.h 4.5 95/08/09 GIE REL"; +#endif +/* Full list of current projections for Tue Jan 11 12:27:04 EST 1994 +** +** Copy this file and retain only appropriate lines for subset list +*/ +PROJ_HEAD(aea, "Albers Equal Area") +PROJ_HEAD(aeqd, "Azimuthal Equidistant") +PROJ_HEAD(airy, "Airy") +PROJ_HEAD(aitoff, "Aitoff") +PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") +PROJ_HEAD(apian, "Apian Globular I") +PROJ_HEAD(august, "August Epicycloidal") +PROJ_HEAD(bacon, "Bacon Globular") +PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") +PROJ_HEAD(boggs, "Boggs Eumorphic") +PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") +PROJ_HEAD(calcofi, "Cal Coop Ocean Fish Invest Lines/Stations") +PROJ_HEAD(cass, "Cassini") +PROJ_HEAD(cc, "Central Cylindrical") +PROJ_HEAD(cea, "Equal Area Cylindrical") +PROJ_HEAD(chamb, "Chamberlin Trimetric") +PROJ_HEAD(collg, "Collignon") +PROJ_HEAD(comill, "Compact Miller") +PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") +PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") +PROJ_HEAD(eck1, "Eckert I") +PROJ_HEAD(eck2, "Eckert II") +PROJ_HEAD(eck3, "Eckert III") +PROJ_HEAD(eck4, "Eckert IV") +PROJ_HEAD(eck5, "Eckert V") +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") +PROJ_HEAD(gall, "Gall (Gall Stereographic)") +PROJ_HEAD(geocent, "Geocentric") +PROJ_HEAD(geos, "Geostationary Satellite View") +PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") +PROJ_HEAD(gn_sinu, "General Sinusoidal Series") +PROJ_HEAD(gnom, "Gnomonic") +PROJ_HEAD(goode, "Goode Homolosine") +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") +PROJ_HEAD(labrd, "Laborde") +PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") +PROJ_HEAD(lagrng, "Lagrange") +PROJ_HEAD(larr, "Larrivee") +PROJ_HEAD(lask, "Laskowski") +PROJ_HEAD(lonlat, "Lat/long (Geodetic)") +PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") +PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") +PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") +PROJ_HEAD(lcc, "Lambert Conformal Conic") +PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") +PROJ_HEAD(leac, "Lambert Equal Area Conic") +PROJ_HEAD(lee_os, "Lee Oblated Stereographic") +PROJ_HEAD(loxim, "Loximuthal") +PROJ_HEAD(lsat, "Space oblique for LANDSAT") +PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine") +PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") +PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") +PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") +PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") +PROJ_HEAD(merc, "Mercator") +PROJ_HEAD(mil_os, "Miller Oblated Stereographic") +PROJ_HEAD(mill, "Miller Cylindrical") +PROJ_HEAD(misrsom, "Space oblique for MISR") +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(natearth2, "Natural Earth II") +PROJ_HEAD(nell, "Nell") +PROJ_HEAD(nell_h, "Nell-Hammer") +PROJ_HEAD(nicol, "Nicolosi Globular") +PROJ_HEAD(nsper, "Near-sided perspective") +PROJ_HEAD(nzmg, "New Zealand Map Grid") +PROJ_HEAD(ob_tran, "General Oblique Transformation") +PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") +PROJ_HEAD(oea, "Oblated Equal Area") +PROJ_HEAD(omerc, "Oblique Mercator") +PROJ_HEAD(ortel, "Ortelius Oval") +PROJ_HEAD(ortho, "Orthographic") +PROJ_HEAD(pconic, "Perspective Conic") +PROJ_HEAD(patterson, "Patterson Cylindrical") +PROJ_HEAD(poly, "Polyconic (American)") +PROJ_HEAD(putp1, "Putnins P1") +PROJ_HEAD(putp2, "Putnins P2") +PROJ_HEAD(putp3, "Putnins P3") +PROJ_HEAD(putp3p, "Putnins P3'") +PROJ_HEAD(putp4p, "Putnins P4'") +PROJ_HEAD(putp5, "Putnins P5") +PROJ_HEAD(putp5p, "Putnins P5'") +PROJ_HEAD(putp6, "Putnins P6") +PROJ_HEAD(putp6p, "Putnins P6'") +PROJ_HEAD(qua_aut, "Quartic Authalic") +PROJ_HEAD(qsc, "Quadrilateralized Spherical Cube") +PROJ_HEAD(robin, "Robinson") +PROJ_HEAD(rouss, "Roussilhe Stereographic") +PROJ_HEAD(rpoly, "Rectangular Polyconic") +PROJ_HEAD(sch, "Spherical Cross-track Height") +PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") +PROJ_HEAD(somerc, "Swiss. Obl. Mercator") +PROJ_HEAD(stere, "Stereographic") +PROJ_HEAD(sterea, "Oblique Stereographic Alternative") +PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") +PROJ_HEAD(tcc, "Transverse Central Cylindrical") +PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") +PROJ_HEAD(times, "Times Projection") +PROJ_HEAD(tissot, "Tissot Conic") +PROJ_HEAD(tmerc, "Transverse Mercator") +PROJ_HEAD(tpeqd, "Two Point Equidistant") +PROJ_HEAD(tpers, "Tilted perspective") +PROJ_HEAD(ups, "Universal Polar Stereographic") +PROJ_HEAD(urm5, "Urmaev V") +PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") +PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") +PROJ_HEAD(vandg, "van der Grinten (I)") +PROJ_HEAD(vandg2, "van der Grinten II") +PROJ_HEAD(vandg3, "van der Grinten III") +PROJ_HEAD(vandg4, "van der Grinten IV") +PROJ_HEAD(vitk1, "Vitkovsky I") +PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") +PROJ_HEAD(wag2, "Wagner II") +PROJ_HEAD(wag3, "Wagner III") +PROJ_HEAD(wag4, "Wagner IV") +PROJ_HEAD(wag5, "Wagner V") +PROJ_HEAD(wag6, "Wagner VI") +PROJ_HEAD(wag7, "Wagner VII") +PROJ_HEAD(weren, "Werenskiold I") +PROJ_HEAD(wink1, "Winkel I") +PROJ_HEAD(wink2, "Winkel II") +PROJ_HEAD(wintri, "Winkel Tripel") diff --git a/proj4/src/pj_log.c b/proj4/src/pj_log.c new file mode 100644 index 000000000000..54b83a059d2b --- /dev/null +++ b/proj4/src/pj_log.c @@ -0,0 +1,71 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of pj_log() function. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include +#include + +/************************************************************************/ +/* pj_stderr_logger() */ +/************************************************************************/ + +void pj_stderr_logger( void *app_data, int level, const char *msg ) + +{ + (void) app_data; + (void) level; + fprintf( stderr, "%s\n", msg ); +} + +/************************************************************************/ +/* pj_log() */ +/************************************************************************/ + +void pj_log( projCtx ctx, int level, const char *fmt, ... ) + +{ + va_list args; + char *msg_buf; + + if( level > ctx->debug_level ) + return; + + msg_buf = (char *) malloc(100000); + if( msg_buf == NULL ) + return; + + va_start( args, fmt ); + + /* we should use vsnprintf where available once we add configure detect.*/ + vsprintf( msg_buf, fmt, args ); + + va_end( args ); + + ctx->logger( ctx->app_data, level, msg_buf ); + + free( msg_buf ); +} diff --git a/proj4/src/pj_malloc.c b/proj4/src/pj_malloc.c new file mode 100644 index 000000000000..aab69e9917f3 --- /dev/null +++ b/proj4/src/pj_malloc.c @@ -0,0 +1,72 @@ +/* allocate and deallocate memory */ +/* These routines are used so that applications can readily replace +** projection system memory allocation/deallocation call with custom +** application procedures. */ +#include +#include + + 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. +*/ + int old_errno = errno; + void *res = malloc(size); + if ( res && !old_errno ) + errno = 0; + return res; +} + void +pj_dalloc(void *ptr) { + free(ptr); +} + + +/**********************************************************************/ +void *pj_calloc (size_t n, size_t size) { +/*********************************************************************** + +pj_calloc is the pj-equivalent of calloc(). + +It allocates space for an array of elements of size . +The array is initialized to zeros. + +***********************************************************************/ + void *res = pj_malloc (n*size); + if (0==res) + return 0; + memset (res, 0, n*size); + return res; +} + + +/**********************************************************************/ +void *pj_dealloc (void *ptr) { +/*********************************************************************** + +pj_dealloc supports the common use case of "clean up and return a null +pointer" to signal an error in a multi level allocation: + + struct foo { int bar; int *baz; }; + + struct foo *p = pj_calloc (1, sizeof (struct foo)); + if (0==p) + return 0; + + p->baz = pj_calloc (10, sizeof(int)); + if (0==p->baz) + return pj_dealloc (p); // clean up + signal error by 0-return + + return p; // success + +***********************************************************************/ + if (0==ptr) + return 0; + pj_dalloc (ptr); + return 0; +} diff --git a/proj4/src/pj_mlfn.c b/proj4/src/pj_mlfn.c new file mode 100644 index 000000000000..aeab61178fd1 --- /dev/null +++ b/proj4/src/pj_mlfn.c @@ -0,0 +1,57 @@ +#include +/* meridinal distance for ellipsoid and inverse +** 8th degree - accurate to < 1e-5 meters when used in conjuction +** with typical major axis values. +** Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds. +*/ +#define C00 1. +#define C02 .25 +#define C04 .046875 +#define C06 .01953125 +#define C08 .01068115234375 +#define C22 .75 +#define C44 .46875 +#define C46 .01302083333333333333 +#define C48 .00712076822916666666 +#define C66 .36458333333333333333 +#define C68 .00569661458333333333 +#define C88 .3076171875 +#define EPS 1e-11 +#define MAX_ITER 10 +#define EN_SIZE 5 + double * +pj_enfn(double es) { + double t, *en; + + 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)); + en[3] = (t *= es) * (C66 - es * C68); + en[4] = t * es * C88; + } /* else return NULL if unable to allocate memory */ + return en; +} + double +pj_mlfn(double phi, double sphi, double cphi, double *en) { + cphi *= sphi; + sphi *= sphi; + return(en[0] * phi - cphi * (en[1] + sphi*(en[2] + + sphi*(en[3] + sphi*en[4])))); +} + double +pj_inv_mlfn(projCtx ctx, double arg, double es, double *en) { + double s, t, phi, k = 1./(1.-es); + int i; + + phi = arg; + for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */ + s = sin(phi); + t = 1. - es * s * s; + phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k; + if (fabs(t) < EPS) + return phi; + } + pj_ctx_set_errno( ctx, -17 ); + return phi; +} diff --git a/proj4/src/pj_msfn.c b/proj4/src/pj_msfn.c new file mode 100644 index 000000000000..5b49f4163661 --- /dev/null +++ b/proj4/src/pj_msfn.c @@ -0,0 +1,7 @@ +/* determine constant small m */ +#include +#include + double +pj_msfn(double sinphi, double cosphi, double es) { + return (cosphi / sqrt (1. - es * sinphi * sinphi)); +} diff --git a/proj4/src/pj_mutex.c b/proj4/src/pj_mutex.c new file mode 100644 index 000000000000..1590daa656fb --- /dev/null +++ b/proj4/src/pj_mutex.c @@ -0,0 +1,224 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Mutex (thread lock) functions. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2009, 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. + *****************************************************************************/ + + +/* projects.h and windows.h conflict - avoid this! */ + +#if defined(MUTEX_pthread) && !defined(_XOPEN_SOURCE) +/* For pthread_mutexattr_settype */ +#define _XOPEN_SOURCE 500 +#endif + + +#ifndef _WIN32 +#include "proj_config.h" +#include +#else +#include +#endif + +/* on win32 we always use win32 mutexes, even if pthreads are available */ +#if defined(_WIN32) && !defined(MUTEX_stub) +#ifndef MUTEX_win32 +# define MUTEX_win32 +#endif +# undef MUTEX_pthread +#endif + +#if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32) +# define MUTEX_stub +#endif + +/************************************************************************/ +/* ==================================================================== */ +/* stub mutex implementation */ +/* ==================================================================== */ +/************************************************************************/ + +#ifdef MUTEX_stub + +/************************************************************************/ +/* pj_acquire_lock() */ +/* */ +/* Acquire the PROJ.4 lock. */ +/************************************************************************/ + +void pj_acquire_lock() +{ +} + +/************************************************************************/ +/* pj_release_lock() */ +/* */ +/* Release the PROJ.4 lock. */ +/************************************************************************/ + +void pj_release_lock() +{ +} + +/************************************************************************/ +/* pj_cleanup_lock() */ +/************************************************************************/ +void pj_cleanup_lock() +{ +} + +#endif /* def MUTEX_stub */ + +/************************************************************************/ +/* ==================================================================== */ +/* pthread mutex implementation */ +/* ==================================================================== */ +/************************************************************************/ + +#ifdef MUTEX_pthread + +#include "pthread.h" + +static pthread_mutex_t pj_precreated_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t pj_core_lock; +static int pj_core_lock_created = 0; + +/************************************************************************/ +/* pj_acquire_lock() */ +/* */ +/* Acquire the PROJ.4 lock. */ +/************************************************************************/ + +void pj_acquire_lock() +{ + if (!pj_core_lock_created) { + /* + ** We need to ensure the core mutex is created in recursive mode + ** and there is no portable way of doing that using automatic + ** initialization so we have pj_precreated_lock only for the purpose + ** of protecting the creation of the core lock. + */ + pthread_mutexattr_t mutex_attr; + + pthread_mutex_lock( &pj_precreated_lock); + + pthread_mutexattr_init(&mutex_attr); +#ifdef HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE); +#else + pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_NP); +#endif + pthread_mutex_init(&pj_core_lock, &mutex_attr); + pj_core_lock_created = 1; + + pthread_mutex_unlock( &pj_precreated_lock ); + } + + pthread_mutex_lock( &pj_core_lock); +} + +/************************************************************************/ +/* pj_release_lock() */ +/* */ +/* Release the PROJ.4 lock. */ +/************************************************************************/ + +void pj_release_lock() +{ + pthread_mutex_unlock( &pj_core_lock ); +} + +/************************************************************************/ +/* pj_cleanup_lock() */ +/************************************************************************/ +void pj_cleanup_lock() +{ +} + +#endif /* def MUTEX_pthread */ + +/************************************************************************/ +/* ==================================================================== */ +/* win32 mutex implementation */ +/* ==================================================================== */ +/************************************************************************/ + +#ifdef MUTEX_win32 + +#include + +static HANDLE mutex_lock = NULL; + +/************************************************************************/ +/* pj_init_lock() */ +/************************************************************************/ + +static void pj_init_lock() + +{ + if( mutex_lock == NULL ) + mutex_lock = CreateMutex( NULL, FALSE, NULL ); +} + +/************************************************************************/ +/* pj_acquire_lock() */ +/* */ +/* Acquire the PROJ.4 lock. */ +/************************************************************************/ + +void pj_acquire_lock() +{ + if( mutex_lock == NULL ) + pj_init_lock(); + + WaitForSingleObject( mutex_lock, INFINITE ); +} + +/************************************************************************/ +/* pj_release_lock() */ +/* */ +/* Release the PROJ.4 lock. */ +/************************************************************************/ + +void pj_release_lock() +{ + if( mutex_lock == NULL ) + pj_init_lock(); + else + ReleaseMutex( mutex_lock ); +} + +/************************************************************************/ +/* pj_cleanup_lock() */ +/************************************************************************/ +void pj_cleanup_lock() +{ + if( mutex_lock != NULL ) + { + CloseHandle( mutex_lock ); + mutex_lock = NULL; + } +} + +#endif /* def MUTEX_win32 */ diff --git a/proj4/src/pj_open_lib.c b/proj4/src/pj_open_lib.c new file mode 100644 index 000000000000..0a2e7fecac21 --- /dev/null +++ b/proj4/src/pj_open_lib.c @@ -0,0 +1,172 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These + * provide a standard interface for opening projections support + * data files. + * Author: Gerald Evenden, Frank Warmerdam + * + ****************************************************************************** + * Copyright (c) 1995, Gerald Evenden + * Copyright (c) 2002, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ +#include +#include +#include +#include + +static const char *(*pj_finder)(const char *) = NULL; +static int path_count = 0; +static char **search_path = NULL; +static char * proj_lib_name = +#ifdef PROJ_LIB +PROJ_LIB; +#else +0; +#endif + +/************************************************************************/ +/* pj_set_finder() */ +/************************************************************************/ + +void pj_set_finder( const char *(*new_finder)(const char *) ) + +{ + pj_finder = new_finder; +} + +/************************************************************************/ +/* pj_set_searchpath() */ +/* */ +/* Path control for callers that can't practically provide */ +/* pj_set_finder() style callbacks. Call with (0,NULL) as args */ +/* to clear the searchpath set. */ +/************************************************************************/ + +void pj_set_searchpath ( int count, const char **path ) +{ + int i; + + if (path_count > 0 && search_path != NULL) + { + for (i = 0; i < path_count; i++) + { + pj_dalloc(search_path[i]); + } + pj_dalloc(search_path); + path_count = 0; + search_path = NULL; + } + + if( count > 0 ) + { + search_path = pj_malloc(sizeof *search_path * count); + for (i = 0; i < count; i++) + { + search_path[i] = pj_malloc(strlen(path[i]) + 1); + strcpy(search_path[i], path[i]); + } + } + + path_count = count; +} + +/************************************************************************/ +/* pj_open_lib() */ +/************************************************************************/ + +PAFile +pj_open_lib(projCtx ctx, const char *name, const char *mode) { + char fname[MAX_PATH_FILENAME+1]; + const char *sysname; + PAFile fid; + int n = 0; + int i; +#ifdef WIN32 + static const char dir_chars[] = "/\\"; +#else + static const char dir_chars[] = "/"; +#endif + +#ifndef _WIN32_WCE + + /* check if ~/name */ + if (*name == '~' && strchr(dir_chars,name[1]) ) + if ((sysname = getenv("HOME")) != NULL) { + (void)strcpy(fname, sysname); + fname[n = strlen(fname)] = DIR_CHAR; + fname[++n] = '\0'; + (void)strcpy(fname+n, name + 1); + sysname = fname; + } else + return NULL; + + /* or fixed path: /name, ./name or ../name */ + else if (strchr(dir_chars,*name) + || (*name == '.' && strchr(dir_chars,name[1])) + || (!strncmp(name, "..", 2) && strchr(dir_chars,name[2])) + || (name[1] == ':' && strchr(dir_chars,name[2])) ) + sysname = name; + + /* or try to use application provided file finder */ + else if( pj_finder != NULL && pj_finder( name ) != NULL ) + sysname = pj_finder( name ); + + /* or is environment PROJ_LIB defined */ + else if ((sysname = getenv("PROJ_LIB")) || (sysname = proj_lib_name)) { + (void)strcpy(fname, sysname); + fname[n = strlen(fname)] = DIR_CHAR; + fname[++n] = '\0'; + (void)strcpy(fname+n, name); + sysname = fname; + } else /* just try it bare bones */ + sysname = name; + + if ((fid = pj_ctx_fopen(ctx, sysname, mode)) != NULL) + errno = 0; + + /* If none of those work and we have a search path, try it */ + if (!fid && path_count > 0) + { + for (i = 0; fid == NULL && i < path_count; i++) + { + sprintf(fname, "%s%c%s", search_path[i], DIR_CHAR, name); + sysname = fname; + fid = pj_ctx_fopen(ctx, sysname, mode); + } + if (fid) + errno = 0; + } + + 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 + return NULL; +#endif /* _WIN32_WCE */ +} diff --git a/proj4/src/pj_param.c b/proj4/src/pj_param.c new file mode 100644 index 000000000000..434d4535cf76 --- /dev/null +++ b/proj4/src/pj_param.c @@ -0,0 +1,108 @@ +/* put parameters in linked list and retrieve */ +#include +#include +#include + paralist * /* create parameter list entry */ +pj_mkparam(char *str) { + paralist *newitem; + + if((newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) != NULL) { + newitem->used = 0; + newitem->next = 0; + if (*str == '+') + ++str; + (void)strcpy(newitem->param, str); + } + return newitem; +} + +/************************************************************************/ +/* pj_param() */ +/* */ +/* Test for presence or get parameter value. The first */ +/* character in `opt' is a parameter type which can take the */ +/* values: */ +/* */ +/* `t' - test for presence, return TRUE/FALSE in PROJVALUE.i */ +/* `i' - integer value returned in PROJVALUE.i */ +/* `d' - simple valued real input returned in PROJVALUE.f */ +/* `r' - degrees (DMS translation applied), returned as */ +/* radians in PROJVALUE.f */ +/* `s' - string returned in PROJVALUE.s */ +/* `b' - test for t/T/f/F, return in PROJVALUE.i */ +/* */ +/************************************************************************/ + + PROJVALUE /* test for presence or get parameter value */ +pj_param(projCtx ctx, paralist *pl, const char *opt) { + + int type; + unsigned l; + PROJVALUE value; + + if( ctx == NULL ) + ctx = pj_get_default_ctx(); + + type = *opt++; + /* simple linear lookup */ + l = strlen(opt); + while (pl && !(!strncmp(pl->param, opt, l) && + (!pl->param[l] || pl->param[l] == '='))) + pl = pl->next; + if (type == 't') + value.i = pl != 0; + else if (pl) { + pl->used |= 1; + opt = pl->param + l; + if (*opt == '=') + ++opt; + switch (type) { + case 'i': /* integer input */ + value.i = atoi(opt); + break; + case 'd': /* simple real input */ + value.f = pj_atof(opt); + break; + case 'r': /* degrees input */ + value.f = dmstor_ctx(ctx, opt, 0); + break; + case 's': /* char string */ + value.s = (char *) opt; + break; + case 'b': /* boolean */ + switch (*opt) { + case 'F': case 'f': + value.i = 0; + break; + case '\0': case 'T': case 't': + value.i = 1; + break; + default: + pj_ctx_set_errno(ctx, -8); + value.i = 0; + break; + } + break; + default: +bum_type: /* note: this is an error in parameter, not a user error */ + fprintf(stderr, "invalid request to pj_param, fatal\n"); + exit(1); + } + } else /* not given */ + switch (type) { + case 'b': + case 'i': + value.i = 0; + break; + case 'd': + case 'r': + value.f = 0.; + break; + case 's': + value.s = 0; + break; + default: + goto bum_type; + } + return value; +} diff --git a/proj4/src/pj_phi2.c b/proj4/src/pj_phi2.c new file mode 100644 index 000000000000..60b36ec4fb6c --- /dev/null +++ b/proj4/src/pj_phi2.c @@ -0,0 +1,24 @@ +/* determine latitude angle phi-2 */ +#include + +#define TOL 1.0e-10 +#define N_ITER 15 + + double +pj_phi2(projCtx ctx, double ts, double e) { + double eccnth, Phi, con, dphi; + int i; + + eccnth = .5 * e; + Phi = M_HALFPI - 2. * atan (ts); + i = N_ITER; + do { + con = e * sin (Phi); + dphi = M_HALFPI - 2. * atan (ts * pow((1. - con) / + (1. + con), eccnth)) - Phi; + Phi += dphi; + } while ( fabs(dphi) > TOL && --i); + if (i <= 0) + pj_ctx_set_errno( ctx, -18 ); + return Phi; +} diff --git a/proj4/src/pj_pr_list.c b/proj4/src/pj_pr_list.c new file mode 100644 index 000000000000..95aab4a08a20 --- /dev/null +++ b/proj4/src/pj_pr_list.c @@ -0,0 +1,92 @@ +/* print projection's list of parameters */ +#include +#include +#include +#define LINE_LEN 72 + static int +pr_list(PJ *P, int not_used) { + paralist *t; + int l, n = 1, flag = 0; + + (void)putchar('#'); + for (t = P->params; t; t = t->next) + if ((!not_used && t->used) || (not_used && !t->used)) { + l = strlen(t->param) + 1; + if (n + l > LINE_LEN) { + (void)fputs("\n#", stdout); + n = 2; + } + (void)putchar(' '); + if (*(t->param) != '+') + (void)putchar('+'); + (void)fputs(t->param, stdout); + n += l; + } else + flag = 1; + if (n > 1) + (void)putchar('\n'); + return flag; +} + void /* print link list of projection parameters */ +pj_pr_list(PJ *P) { + char const *s; + + (void)putchar('#'); + for (s = P->descr; *s ; ++s) { + (void)putchar(*s); + if (*s == '\n') + (void)putchar('#'); + } + (void)putchar('\n'); + if (pr_list(P, 0)) { + (void)fputs("#--- following specified but NOT used\n", stdout); + (void)pr_list(P, 1); + } +} + +/************************************************************************/ +/* pj_get_def() */ +/* */ +/* Returns the PROJ.4 command string that would produce this */ +/* definition expanded as much as possible. For instance, */ +/* +init= calls and +datum= definitions would be expanded. */ +/************************************************************************/ + +char *pj_get_def( PJ *P, int options ) + +{ + paralist *t; + int l; + char *definition; + size_t def_max = 10; + (void) options; + + definition = (char *) pj_malloc(def_max); + definition[0] = '\0'; + + for (t = P->params; t; t = t->next) + { + /* skip unused parameters ... mostly appended defaults and stuff */ + if (!t->used) + continue; + + /* grow the resulting string if needed */ + l = strlen(t->param) + 1; + if( strlen(definition) + l + 5 > def_max ) + { + char *def2; + + def_max = def_max * 2 + l + 5; + def2 = (char *) pj_malloc(def_max); + strcpy( def2, definition ); + pj_dalloc( definition ); + definition = def2; + } + + /* append this parameter */ + strcat( definition, " +" ); + strcat( definition, t->param ); + } + + return definition; +} diff --git a/proj4/src/pj_qsfn.c b/proj4/src/pj_qsfn.c new file mode 100644 index 000000000000..ccb123080959 --- /dev/null +++ b/proj4/src/pj_qsfn.c @@ -0,0 +1,16 @@ +/* determine small q */ +#include +#include + +# define EPSILON 1.0e-7 + double +pj_qsfn(double sinphi, double e, double one_es) { + double con; + + if (e >= EPSILON) { + con = e * sinphi; + return (one_es * (sinphi / (1. - con * con) - + (.5 / e) * log ((1. - con) / (1. + con)))); + } else + return (sinphi + sinphi); +} diff --git a/proj4/src/pj_release.c b/proj4/src/pj_release.c new file mode 100644 index 000000000000..1758a5363d75 --- /dev/null +++ b/proj4/src/pj_release.c @@ -0,0 +1,11 @@ +/* <<< Release Notice for library >>> */ + +#include + +char const pj_release[]="Rel. 4.9.3, 15 August 2016"; + +const char *pj_get_release() + +{ + return pj_release; +} diff --git a/proj4/src/pj_run_selftests.c b/proj4/src/pj_run_selftests.c new file mode 100644 index 000000000000..c0d59f73daba --- /dev/null +++ b/proj4/src/pj_run_selftests.c @@ -0,0 +1,78 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Generic regression test for PROJ.4 projection algorithms. + * Author: Thomas Knudsen + * + ****************************************************************************** + * Copyright (c) 2016, Thomas Knudsen + * + * 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 +#define PJ_LIB__ +#include + + +static void run_one_test (const char *mnemonic, int (testfunc)(void), int verbosity, int *n_ok, int *n_ko, int *n_stubs) { + int ret = testfunc (); + switch (ret) { + case 0: (*n_ok)++; break; + case 10000: (*n_stubs)++; break; + default: (*n_ko)++; + } + + if (verbosity) { + if (ret==10000) + printf ("Testing: %10s - [stub]\n", mnemonic); + else + printf ("Testing: %10s - return code: %d\n", mnemonic, ret); + } + return; +} + + +#ifndef PJ_SELFTEST +int pj_run_selftests (int verbosity) { + printf ("This version of libproj is not configured for internal regression tests.\n"); + return 0; +} +#else + + +int pj_run_selftests (int verbosity) { + int n_ok = 0, n_ko = 0, n_stubs = 0, i = 0; + + struct PJ_SELFTEST_LIST *tests = pj_get_selftest_list_ref (); + + if (0==tests) + printf ("This version of libproj is not configured for internal regression tests.\n"); + + if (verbosity) + printf ("Running internal regression tests\n"); + + for (i = 0; tests[i].testfunc != 0; i++) + run_one_test (tests[i].id, tests[i].testfunc, verbosity, &n_ok, &n_ko, &n_stubs); + + if (0==verbosity) + printf ("Internal regression tests done. "); + printf ("[Stubs: %d] Total: %d. Failure: %d. Success: %d\n", n_stubs, n_ok+n_ko, n_ko, n_ok); + return n_ko; +} +#endif diff --git a/proj4/src/pj_strerrno.c b/proj4/src/pj_strerrno.c new file mode 100644 index 000000000000..b46f143c26ee --- /dev/null +++ b/proj4/src/pj_strerrno.c @@ -0,0 +1,85 @@ +/* list of projection system pj_errno values */ +#include "projects.h" +#include +#include +#include + + static char * +pj_err_list[] = { + "no arguments in initialization list", /* -1 */ + "no options found in 'init' file", /* -2 */ + "no colon in init= string", /* -3 */ + "projection not named", /* -4 */ + "unknown projection id", /* -5 */ + "effective eccentricity = 1.", /* -6 */ + "unknown unit conversion id", /* -7 */ + "invalid boolean param argument", /* -8 */ + "unknown elliptical parameter name", /* -9 */ + "reciprocal flattening (1/f) = 0", /* -10 */ + "|radius reference latitude| > 90", /* -11 */ + "squared eccentricity < 0", /* -12 */ + "major axis or radius = 0 or not given", /* -13 */ + "latitude or longitude exceeded limits", /* -14 */ + "invalid x or y", /* -15 */ + "improperly formed DMS value", /* -16 */ + "non-convergent inverse meridional dist", /* -17 */ + "non-convergent inverse phi2", /* -18 */ + "acos/asin: |arg| >1.+1e-14", /* -19 */ + "tolerance condition error", /* -20 */ + "conic lat_1 = -lat_2", /* -21 */ + "lat_1 >= 90", /* -22 */ + "lat_1 = 0", /* -23 */ + "lat_ts >= 90", /* -24 */ + "no distance between control points", /* -25 */ + "projection not selected to be rotated", /* -26 */ + "W <= 0 or M <= 0", /* -27 */ + "lsat not in 1-5 range", /* -28 */ + "path not in range", /* -29 */ + "h <= 0", /* -30 */ + "k <= 0", /* -31 */ + "lat_0 = 0 or 90 or alpha = 90", /* -32 */ + "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -33 */ + "elliptical usage required", /* -34 */ + "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 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 */ + "|lat_1| == |lat_2|", /* -42 */ + "lat_0 is pi/2 from mean lat", /* -43 */ + "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) +{ + static char note[50]; + + if (err > 0) +#ifdef HAVE_STRERROR + return strerror(err); +#else + { + sprintf(note,"no system list, errno: %d\n", err); + return note; + } +#endif + else if (err < 0) { + size_t adjusted_err = - err - 1; + if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *))) + return(pj_err_list[adjusted_err]); + else + { + sprintf( note, "invalid projection system error (%d)", + err ); + return note; + } + } else + return NULL; +} diff --git a/proj4/src/pj_strtod.c b/proj4/src/pj_strtod.c new file mode 100644 index 000000000000..7c2da9a714f4 --- /dev/null +++ b/proj4/src/pj_strtod.c @@ -0,0 +1,190 @@ +/****************************************************************************** + * + * Derived from GDAL port/cpl_strtod.cpp + * Purpose: Functions to convert ASCII string to floating point number. + * Author: Andrey Kiselev, dron@ak4719.spb.edu. + * + ****************************************************************************** + * Copyright (c) 2006, Andrey Kiselev + * Copyright (c) 2008-2012, Even Rouault + * + * 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" + +/* Windows nmake build doesn't have a proj_config.h, but HAVE_LOCALECONV */ +/* is defined in the compilation line */ +#ifndef HAVE_LOCALECONV +#include "proj_config.h" +#endif + +#include +#include +#include + +#define PJ_STRTOD_WORK_BUFFER_SIZE 64 + +/************************************************************************/ +/* pj_atof() */ +/************************************************************************/ + +/** + * Converts ASCII string to floating point number. + * + * This function converts the initial portion of the string pointed to + * by nptr to double floating point representation. The behaviour is the + * same as + * + * pj_strtod(nptr, (char **)NULL); + * + * This function does the same as standard atof(3), but does not take + * locale in account. That means, the decimal delimiter is always '.' + * (decimal point). + * + * @param nptr Pointer to string to convert. + * + * @return Converted value. + */ +double pj_atof( const char* nptr ) +{ + return pj_strtod(nptr, NULL); +} + + +/************************************************************************/ +/* pj_replace_point_by_locale_point() */ +/************************************************************************/ + +static char* pj_replace_point_by_locale_point(const char* pszNumber, char point, + char* pszWorkBuffer) +{ +#if !defined(HAVE_LOCALECONV) || defined(_WIN32_WCE) + +#if defined(_MSC_VER) /* Visual C++ */ +#pragma message("localeconv not available") +#else +#warning "localeconv not available" +#endif + + static char byPoint = 0; + if (byPoint == 0) + { + char szBuf[16]; + sprintf(szBuf, "%.1f", 1.0); + byPoint = szBuf[1]; + } + if (point != byPoint) + { + const char* pszPoint = strchr(pszNumber, point); + if (pszPoint) + { + char* pszNew; + if( strlen(pszNumber) < PJ_STRTOD_WORK_BUFFER_SIZE ) + { + strcpy(pszWorkBuffer, pszNumber); + pszNew = pszWorkBuffer; + } + else + pszNew = strdup(pszNumber); + pszNew[pszPoint - pszNumber] = byPoint; + return pszNew; + } + } +#else + struct lconv *poLconv = localeconv(); + if ( poLconv + && poLconv->decimal_point + && poLconv->decimal_point[0] != '\0' ) + { + char byPoint = poLconv->decimal_point[0]; + + if (point != byPoint) + { + const char* pszLocalePoint = strchr(pszNumber, byPoint); + const char* pszPoint = strchr(pszNumber, point); + if (pszPoint || pszLocalePoint) + { + char* pszNew; + if( strlen(pszNumber) < PJ_STRTOD_WORK_BUFFER_SIZE ) + { + strcpy(pszWorkBuffer, pszNumber); + pszNew = pszWorkBuffer; + } + else + pszNew = strdup(pszNumber); + if( pszLocalePoint ) + pszNew[pszLocalePoint - pszNumber] = ' '; + if( pszPoint ) + pszNew[pszPoint - pszNumber] = byPoint; + return pszNew; + } + } + } +#endif + return (char*) pszNumber; +} + +/************************************************************************/ +/* pj_strtod() */ +/************************************************************************/ + +/** + * Converts ASCII string to floating point number. + * + * This function converts the initial portion of the string pointed to + * by nptr to double floating point representation. This function does the + * same as standard strtod(3), but does not take locale in account and use + * decimal point. + * + * @param nptr Pointer to string to convert. + * @param endptr If is not NULL, a pointer to the character after the last + * character used in the conversion is stored in the location referenced + * by endptr. + * @param point Decimal delimiter. + * + * @return Converted value. + */ +double pj_strtod( const char *nptr, char **endptr ) +{ +/* -------------------------------------------------------------------- */ +/* We are implementing a simple method here: copy the input string */ +/* into the temporary buffer, replace the specified decimal delimiter */ +/* with the one, taken from locale settings and use standard strtod() */ +/* on that buffer. */ +/* -------------------------------------------------------------------- */ + double dfValue; + int nError; + char szWorkBuffer[PJ_STRTOD_WORK_BUFFER_SIZE]; + + char* pszNumber = pj_replace_point_by_locale_point(nptr, '.', szWorkBuffer); + + dfValue = strtod( pszNumber, endptr ); + nError = errno; + + if ( endptr ) + *endptr = (char *)nptr + (*endptr - pszNumber); + + if (pszNumber != (char*) nptr && pszNumber != szWorkBuffer ) + free( pszNumber ); + + errno = nError; + return dfValue; +} + diff --git a/proj4/src/pj_transform.c b/proj4/src/pj_transform.c new file mode 100644 index 000000000000..1794678b190c --- /dev/null +++ b/proj4/src/pj_transform.c @@ -0,0 +1,914 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Perform overall coordinate system to coordinate system + * transformations (pj_transform() function) including reprojection + * and datum shifting. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2000, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include +#include +#include "geocent.h" + +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 +#endif + +#ifndef SRS_WGS84_ESQUARED +#define SRS_WGS84_ESQUARED 0.0066943799901413165 +#endif + +#define Dx_BF (defn->datum_params[0]) +#define Dy_BF (defn->datum_params[1]) +#define Dz_BF (defn->datum_params[2]) +#define Rx_BF (defn->datum_params[3]) +#define Ry_BF (defn->datum_params[4]) +#define Rz_BF (defn->datum_params[5]) +#define M_BF (defn->datum_params[6]) + +/* +** This table is intended to indicate for any given error code in +** the range 0 to -44, whether that error will occur for all locations (ie. +** it is a problem with the coordinate system as a whole) in which case the +** value would be 0, or if the problem is with the point being transformed +** in which case the value is 1. +** +** At some point we might want to move this array in with the error message +** list or something, but while experimenting with it this should be fine. +*/ + +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, 0, 0, + /* 40 to 49 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }; + +/************************************************************************/ +/* pj_transform() */ +/* */ +/* Currently this function doesn't recognise if two projections */ +/* are identical (to short circuit reprojection) because it is */ +/* difficult to compare PJ structures (since there are some */ +/* projection specific components). */ +/************************************************************************/ + +int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + long i; + int err; + + 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_ctx_set_errno( pj_get_ctx(srcdefn), PJD_ERR_GEOCENTRIC); + return PJD_ERR_GEOCENTRIC; + } + + if( srcdefn->to_meter != 1.0 ) + { + for( i = 0; i < point_count; i++ ) + { + if( x[point_offset*i] != HUGE_VAL ) + { + x[point_offset*i] *= srcdefn->to_meter; + y[point_offset*i] *= srcdefn->to_meter; + } + } + } + + err = pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig, + point_count, point_offset, + x, y, z ); + if( err != 0 ) + return err; + } + +/* -------------------------------------------------------------------- */ +/* Transform source points to lat/long, if they aren't */ +/* already. */ +/* -------------------------------------------------------------------- */ + else if( !srcdefn->is_latlong ) + { + + /* Check first if projection is invertible. */ + if( (srcdefn->inv3d == NULL) && (srcdefn->inv == NULL)) + { + 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; + } + + /* If invertible - First try inv3d if defined */ + if (srcdefn->inv3d != NULL) + { + /* Three dimensions must be defined */ + if ( z == NULL) + { + pj_ctx_set_errno( pj_get_ctx(srcdefn), PJD_ERR_GEOCENTRIC); + return PJD_ERR_GEOCENTRIC; + } + + for (i=0; i < point_count; i++) + { + XYZ projected_loc; + XYZ geodetic_loc; + + projected_loc.u = x[point_offset*i]; + projected_loc.v = y[point_offset*i]; + projected_loc.w = z[point_offset*i]; + + if (projected_loc.u == HUGE_VAL) + continue; + + geodetic_loc = pj_inv3d(projected_loc, srcdefn); + if( srcdefn->ctx->last_errno != 0 ) + { + 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; + geodetic_loc.v = HUGE_VAL; + geodetic_loc.w = HUGE_VAL; + } + } + + x[point_offset*i] = geodetic_loc.u; + y[point_offset*i] = geodetic_loc.v; + z[point_offset*i] = geodetic_loc.w; + + } + + } + else + { + /* Fallback to the original PROJ.4 API 2d inversion - inv */ + for( i = 0; i < point_count; i++ ) + { + XY projected_loc; + LP geodetic_loc; + + projected_loc.u = x[point_offset*i]; + projected_loc.v = y[point_offset*i]; + + if( projected_loc.u == HUGE_VAL ) + continue; + + geodetic_loc = pj_inv( projected_loc, srcdefn ); + if( srcdefn->ctx->last_errno != 0 ) + { + 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; + geodetic_loc.v = HUGE_VAL; + } + } + + x[point_offset*i] = geodetic_loc.u; + y[point_offset*i] = geodetic_loc.v; + } + } + } +/* -------------------------------------------------------------------- */ +/* But if they are already lat long, adjust for the prime */ +/* meridian if there is one in effect. */ +/* -------------------------------------------------------------------- */ + if( srcdefn->from_greenwich != 0.0 ) + { + for( i = 0; i < point_count; i++ ) + { + if( x[point_offset*i] != HUGE_VAL ) + x[point_offset*i] += srcdefn->from_greenwich; + } + } + +/* -------------------------------------------------------------------- */ +/* Do we need to translate from geoid to ellipsoidal vertical */ +/* datum? */ +/* -------------------------------------------------------------------- */ + if( srcdefn->has_geoid_vgrids && z != NULL ) + { + 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 ) + { + 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 && z != NULL ) + { + 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. */ +/* -------------------------------------------------------------------- */ + if( dstdefn->from_greenwich != 0.0 ) + { + for( i = 0; i < point_count; i++ ) + { + if( x[point_offset*i] != HUGE_VAL ) + x[point_offset*i] -= dstdefn->from_greenwich; + } + } + + +/* -------------------------------------------------------------------- */ +/* Transform destination latlong to geocentric if required. */ +/* -------------------------------------------------------------------- */ + if( dstdefn->is_geocent ) + { + if( z == NULL ) + { + pj_ctx_set_errno( dstdefn->ctx, PJD_ERR_GEOCENTRIC ); + return PJD_ERR_GEOCENTRIC; + } + + pj_geodetic_to_geocentric( dstdefn->a_orig, dstdefn->es_orig, + point_count, point_offset, x, y, z ); + + if( dstdefn->fr_meter != 1.0 ) + { + for( i = 0; i < point_count; i++ ) + { + if( x[point_offset*i] != HUGE_VAL ) + { + x[point_offset*i] *= dstdefn->fr_meter; + y[point_offset*i] *= dstdefn->fr_meter; + } + } + } + } + +/* -------------------------------------------------------------------- */ +/* Transform destination points to projection coordinates, if */ +/* desired. */ +/* -------------------------------------------------------------------- */ + else if( !dstdefn->is_latlong ) + { + + if( dstdefn->fwd3d != NULL) + { + for( i = 0; i < point_count; i++ ) + { + XYZ projected_loc; + LPZ geodetic_loc; + + geodetic_loc.u = x[point_offset*i]; + geodetic_loc.v = y[point_offset*i]; + geodetic_loc.w = z[point_offset*i]; + + if (geodetic_loc.u == HUGE_VAL) + continue; + + projected_loc = pj_fwd3d( geodetic_loc, dstdefn); + if( dstdefn->ctx->last_errno != 0 ) + { + 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; + projected_loc.v = HUGE_VAL; + projected_loc.w = HUGE_VAL; + } + } + + x[point_offset*i] = projected_loc.u; + y[point_offset*i] = projected_loc.v; + z[point_offset*i] = projected_loc.w; + } + + } + else + { + for( i = 0; i < point_count; i++ ) + { + XY projected_loc; + LP geodetic_loc; + + geodetic_loc.u = x[point_offset*i]; + geodetic_loc.v = y[point_offset*i]; + + if( geodetic_loc.u == HUGE_VAL ) + continue; + + projected_loc = pj_fwd( geodetic_loc, dstdefn ); + if( dstdefn->ctx->last_errno != 0 ) + { + 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; + projected_loc.v = HUGE_VAL; + } + } + + x[point_offset*i] = projected_loc.u; + y[point_offset*i] = projected_loc.v; + } + } + } + +/* -------------------------------------------------------------------- */ +/* 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->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 - M_PI ) + x[point_offset*i] += M_TWOPI; + while( x[point_offset*i] > dstdefn->long_wrap_center + M_PI ) + x[point_offset*i] -= M_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; +} + +/************************************************************************/ +/* pj_geodetic_to_geocentric() */ +/************************************************************************/ + +int pj_geodetic_to_geocentric( double a, double es, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + double b; + int i; + GeocentricInfo gi; + int ret_errno = 0; + + if( es == 0.0 ) + b = a; + else + b = a * sqrt(1-es); + + if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) + { + return PJD_ERR_GEOCENTRIC; + } + + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + + if( x[io] == HUGE_VAL ) + continue; + + if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io], + x+io, y+io, z+io ) != 0 ) + { + ret_errno = -14; + x[io] = y[io] = HUGE_VAL; + /* but keep processing points! */ + } + } + + return ret_errno; +} + +/************************************************************************/ +/* pj_geodetic_to_geocentric() */ +/************************************************************************/ + +int pj_geocentric_to_geodetic( double a, double es, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + double b; + int i; + GeocentricInfo gi; + + if( es == 0.0 ) + b = a; + else + b = a * sqrt(1-es); + + if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) + { + return PJD_ERR_GEOCENTRIC; + } + + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + + if( x[io] == HUGE_VAL ) + continue; + + pj_Convert_Geocentric_To_Geodetic( &gi, x[io], y[io], z[io], + y+io, x+io, z+io ); + } + + return 0; +} + +/************************************************************************/ +/* pj_compare_datums() */ +/* */ +/* Returns TRUE if the two datums are identical, otherwise */ +/* FALSE. */ +/************************************************************************/ + +int pj_compare_datums( PJ *srcdefn, PJ *dstdefn ) + +{ + if( srcdefn->datum_type != dstdefn->datum_type ) + { + return 0; + } + else if( srcdefn->a_orig != dstdefn->a_orig + || ABS(srcdefn->es_orig - dstdefn->es_orig) > 0.000000000050 ) + { + /* the tolerence for es is to ensure that GRS80 and WGS84 are + considered identical */ + return 0; + } + else if( srcdefn->datum_type == PJD_3PARAM ) + { + return (srcdefn->datum_params[0] == dstdefn->datum_params[0] + && srcdefn->datum_params[1] == dstdefn->datum_params[1] + && srcdefn->datum_params[2] == dstdefn->datum_params[2]); + } + else if( srcdefn->datum_type == PJD_7PARAM ) + { + return (srcdefn->datum_params[0] == dstdefn->datum_params[0] + && srcdefn->datum_params[1] == dstdefn->datum_params[1] + && srcdefn->datum_params[2] == dstdefn->datum_params[2] + && srcdefn->datum_params[3] == dstdefn->datum_params[3] + && srcdefn->datum_params[4] == dstdefn->datum_params[4] + && srcdefn->datum_params[5] == dstdefn->datum_params[5] + && srcdefn->datum_params[6] == dstdefn->datum_params[6]); + } + else if( srcdefn->datum_type == PJD_GRIDSHIFT ) + { + return strcmp( pj_param(srcdefn->ctx, srcdefn->params,"snadgrids").s, + pj_param(dstdefn->ctx, dstdefn->params,"snadgrids").s ) == 0; + } + else + return 1; +} + +/************************************************************************/ +/* pj_geocentic_to_wgs84() */ +/************************************************************************/ + +int pj_geocentric_to_wgs84( PJ *defn, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + int i; + + if( defn->datum_type == PJD_3PARAM ) + { + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + + if( x[io] == HUGE_VAL ) + continue; + + x[io] = x[io] + Dx_BF; + y[io] = y[io] + Dy_BF; + z[io] = z[io] + Dz_BF; + } + } + else if( defn->datum_type == PJD_7PARAM ) + { + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + double x_out, y_out, z_out; + + if( x[io] == HUGE_VAL ) + continue; + + x_out = M_BF*( x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF; + y_out = M_BF*( Rz_BF*x[io] + y[io] - Rx_BF*z[io]) + Dy_BF; + z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] + z[io]) + Dz_BF; + + x[io] = x_out; + y[io] = y_out; + z[io] = z_out; + } + } + + return 0; +} + +/************************************************************************/ +/* pj_geocentic_from_wgs84() */ +/************************************************************************/ + +int pj_geocentric_from_wgs84( PJ *defn, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + int i; + + if( defn->datum_type == PJD_3PARAM ) + { + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + + if( x[io] == HUGE_VAL ) + continue; + + x[io] = x[io] - Dx_BF; + y[io] = y[io] - Dy_BF; + z[io] = z[io] - Dz_BF; + } + } + else if( defn->datum_type == PJD_7PARAM ) + { + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + double x_tmp, y_tmp, z_tmp; + + if( x[io] == HUGE_VAL ) + continue; + + x_tmp = (x[io] - Dx_BF) / M_BF; + y_tmp = (y[io] - Dy_BF) / M_BF; + z_tmp = (z[io] - Dz_BF) / M_BF; + + x[io] = x_tmp + Rz_BF*y_tmp - Ry_BF*z_tmp; + y[io] = -Rz_BF*x_tmp + y_tmp + Rx_BF*z_tmp; + z[io] = Ry_BF*x_tmp - Rx_BF*y_tmp + z_tmp; + } + } + + return 0; +} + +/************************************************************************/ +/* pj_datum_transform() */ +/* */ +/* The input should be long/lat/z coordinates in radians in the */ +/* source datum, and the output should be long/lat/z */ +/* coordinates in radians in the destination datum. */ +/************************************************************************/ + +int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + double src_a, src_es, dst_a, dst_es; + int z_is_temp = FALSE; + +/* -------------------------------------------------------------------- */ +/* We cannot do any meaningful datum transformation if either */ +/* the source or destination are of an unknown datum type */ +/* (ie. only a +ellps declaration, no +datum). This is new */ +/* behavior for PROJ 4.6.0. */ +/* -------------------------------------------------------------------- */ + if( srcdefn->datum_type == PJD_UNKNOWN + || dstdefn->datum_type == PJD_UNKNOWN ) + return 0; + +/* -------------------------------------------------------------------- */ +/* Short cut if the datums are identical. */ +/* -------------------------------------------------------------------- */ + if( pj_compare_datums( srcdefn, dstdefn ) ) + return 0; + + src_a = srcdefn->a_orig; + src_es = srcdefn->es_orig; + + dst_a = dstdefn->a_orig; + dst_es = dstdefn->es_orig; + +/* -------------------------------------------------------------------- */ +/* Create a temporary Z array if one is not provided. */ +/* -------------------------------------------------------------------- */ + if( z == NULL ) + { + int bytes = sizeof(double) * point_count * point_offset; + z = (double *) pj_malloc(bytes); + memset( z, 0, bytes ); + z_is_temp = TRUE; + } + +#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 */ +/* coordinates. */ +/* -------------------------------------------------------------------- */ + if( srcdefn->datum_type == PJD_GRIDSHIFT ) + { + 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; + } + + if( dstdefn->datum_type == PJD_GRIDSHIFT ) + { + dst_a = SRS_WGS84_SEMIMAJOR; + dst_es = SRS_WGS84_ESQUARED; + } + +/* ==================================================================== */ +/* Do we need to go through geocentric coordinates? */ +/* ==================================================================== */ + if( src_es != dst_es || src_a != dst_a + || srcdefn->datum_type == PJD_3PARAM + || srcdefn->datum_type == PJD_7PARAM + || dstdefn->datum_type == PJD_3PARAM + || dstdefn->datum_type == PJD_7PARAM) + { +/* -------------------------------------------------------------------- */ +/* Convert to geocentric coordinates. */ +/* -------------------------------------------------------------------- */ + 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. */ +/* -------------------------------------------------------------------- */ + if( srcdefn->datum_type == PJD_3PARAM + || srcdefn->datum_type == PJD_7PARAM ) + { + pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z); + 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(dstdefn); + } + +/* -------------------------------------------------------------------- */ +/* Convert back to geodetic coordinates. */ +/* -------------------------------------------------------------------- */ + dstdefn->ctx->last_errno = + pj_geocentric_to_geodetic( dst_a, dst_es, + point_count, point_offset, x, y, z ); + CHECK_RETURN(dstdefn); + } + +/* -------------------------------------------------------------------- */ +/* Apply grid shift to destination if required. */ +/* -------------------------------------------------------------------- */ + if( dstdefn->datum_type == PJD_GRIDSHIFT ) + { + pj_apply_gridshift_2( dstdefn, 1, point_count, point_offset, x, y, z ); + CHECK_RETURN(dstdefn); + } + + if( z_is_temp ) + pj_dalloc( z ); + + 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/proj4/src/pj_tsfn.c b/proj4/src/pj_tsfn.c new file mode 100644 index 000000000000..448aae99e17c --- /dev/null +++ b/proj4/src/pj_tsfn.c @@ -0,0 +1,10 @@ +/* determine small t */ +#include +#include + + double +pj_tsfn(double phi, double sinphi, double e) { + sinphi *= e; + return (tan (.5 * (M_HALFPI - phi)) / + pow((1. - sinphi) / (1. + sinphi), .5 * e)); +} diff --git a/proj4/src/pj_units.c b/proj4/src/pj_units.c new file mode 100644 index 000000000000..c6b5ae37c0af --- /dev/null +++ b/proj4/src/pj_units.c @@ -0,0 +1,37 @@ +/* definition of standard cartesian units */ +#define PJ_UNITS__ +#include +/* Field 2 that contains the multiplier to convert named units to meters +** may be expressed by either a simple floating point constant or a +** numerator/denomenator values (e.g. 1/1000) */ +C_NAMESPACE_VAR struct PJ_UNITS +pj_units[] = { + {"km", "1000.", "Kilometer"}, + {"m", "1.", "Meter"}, + {"dm", "1/10", "Decimeter"}, + {"cm", "1/100", "Centimeter"}, + {"mm", "1/1000", "Millimeter"}, + {"kmi", "1852.0", "International Nautical Mile"}, + {"in", "0.0254", "International Inch"}, + {"ft", "0.3048", "International Foot"}, + {"yd", "0.9144", "International Yard"}, + {"mi", "1609.344", "International Statute Mile"}, + {"fath", "1.8288", "International Fathom"}, + {"ch", "20.1168", "International Chain"}, + {"link", "0.201168", "International Link"}, + {"us-in", "1./39.37", "U.S. Surveyor's Inch"}, + {"us-ft", "0.304800609601219", "U.S. Surveyor's Foot"}, + {"us-yd", "0.914401828803658", "U.S. Surveyor's Yard"}, + {"us-ch", "20.11684023368047", "U.S. Surveyor's Chain"}, + {"us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile"}, + {"ind-yd", "0.91439523", "Indian Yard"}, + {"ind-ft", "0.30479841", "Indian Foot"}, + {"ind-ch", "20.11669506", "Indian Chain"}, + {NULL, NULL, NULL} +}; + +struct PJ_UNITS *pj_get_units_ref() + +{ + return pj_units; +} diff --git a/proj4/src/pj_utils.c b/proj4/src/pj_utils.c new file mode 100644 index 000000000000..203c637c9808 --- /dev/null +++ b/proj4/src/pj_utils.c @@ -0,0 +1,178 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Some utility functions we don't want to bother putting in + * their own source files. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2001, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +/************************************************************************/ +/* pj_is_latlong() */ +/* */ +/* Returns TRUE if this coordinate system object is */ +/* geographic. */ +/************************************************************************/ + +int pj_is_latlong( PJ *pj ) + +{ + return pj == NULL || pj->is_latlong; +} + +/************************************************************************/ +/* pj_is_geocent() */ +/* */ +/* Returns TRUE if this coordinate system object is geocentric. */ +/************************************************************************/ + +int pj_is_geocent( PJ *pj ) + +{ + return pj != NULL && pj->is_geocent; +} + +/************************************************************************/ +/* pj_latlong_from_proj() */ +/* */ +/* Return a PJ* definition defining the lat/long coordinate */ +/* system on which a projection is based. If the coordinate */ +/* system passed in is latlong, a clone of the same will be */ +/* returned. */ +/************************************************************************/ + +PJ *pj_latlong_from_proj( PJ *pj_in ) + +{ + char defn[512]; + int got_datum = FALSE; + + pj_errno = 0; + strcpy( defn, "+proj=latlong" ); + + if( pj_param(pj_in->ctx, pj_in->params, "tdatum").i ) + { + got_datum = TRUE; + sprintf( defn+strlen(defn), " +datum=%s", + pj_param(pj_in->ctx, pj_in->params,"sdatum").s ); + } + else if( pj_param(pj_in->ctx, pj_in->params, "tellps").i ) + { + sprintf( defn+strlen(defn), " +ellps=%s", + pj_param(pj_in->ctx, pj_in->params,"sellps").s ); + } + else if( pj_param(pj_in->ctx,pj_in->params, "ta").i ) + { + sprintf( defn+strlen(defn), " +a=%s", + pj_param(pj_in->ctx,pj_in->params,"sa").s ); + + if( pj_param(pj_in->ctx,pj_in->params, "tb").i ) + sprintf( defn+strlen(defn), " +b=%s", + 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->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->ctx,pj_in->params,"sf").s ); + else + { + char* ptr = defn+strlen(defn); + sprintf( ptr, " +es=%.16g", pj_in->es ); + for(; *ptr; ptr++) + { + if( *ptr == ',' ) + *ptr = '.'; + } + } + } + else + { + pj_ctx_set_errno( pj_in->ctx, -13 ); + + return NULL; + } + + if( !got_datum ) + { + if( pj_param(pj_in->ctx,pj_in->params, "ttowgs84").i ) + sprintf( defn+strlen(defn), " +towgs84=%s", + pj_param(pj_in->ctx,pj_in->params,"stowgs84").s ); + + if( pj_param(pj_in->ctx,pj_in->params, "tnadgrids").i ) + sprintf( defn+strlen(defn), " +nadgrids=%s", + pj_param(pj_in->ctx,pj_in->params,"snadgrids").s ); + } + + /* copy over some other information related to ellipsoid */ + if( pj_param(pj_in->ctx,pj_in->params, "tR").i ) + sprintf( defn+strlen(defn), " +R=%s", + pj_param(pj_in->ctx,pj_in->params,"sR").s ); + + if( pj_param(pj_in->ctx,pj_in->params, "tR_A").i ) + sprintf( defn+strlen(defn), " +R_A" ); + + if( pj_param(pj_in->ctx,pj_in->params, "tR_V").i ) + sprintf( defn+strlen(defn), " +R_V" ); + + if( pj_param(pj_in->ctx,pj_in->params, "tR_a").i ) + sprintf( defn+strlen(defn), " +R_a" ); + + 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->ctx,pj_in->params,"sR_lat_a").s ); + + 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->ctx,pj_in->params,"sR_lat_g").s ); + + /* copy over prime meridian */ + if( pj_param(pj_in->ctx,pj_in->params, "tpm").i ) + sprintf( defn+strlen(defn), " +pm=%s", + pj_param(pj_in->ctx,pj_in->params,"spm").s ); + + 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/proj4/src/pj_zpoly1.c b/proj4/src/pj_zpoly1.c new file mode 100644 index 000000000000..3d6418bb08ca --- /dev/null +++ b/proj4/src/pj_zpoly1.c @@ -0,0 +1,46 @@ +/* evaluate complex polynomial */ +#include +/* note: coefficients are always from C_1 to C_n +** i.e. C_0 == (0., 0) +** n should always be >= 1 though no checks are made +*/ + COMPLEX +pj_zpoly1(COMPLEX z, COMPLEX *C, int n) { + COMPLEX a; + double t; + + a = *(C += n); + while (n-- > 0) { + a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; + a.i = C->i + z.r * a.i + z.i * t; + } + a.r = z.r * (t = a.r) - z.i * a.i; + a.i = z.r * a.i + z.i * t; + return a; +} +/* evaluate complex polynomial and derivative */ + COMPLEX +pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) { + COMPLEX a, b; + double t; + int first = 1; + + a = *(C += n); + b = a; + while (n-- > 0) { + if (first) { + first = 0; + } else { + b.r = a.r + z.r * (t = b.r) - z.i * b.i; + b.i = a.i + z.r * b.i + z.i * t; + } + a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; + a.i = C->i + z.r * a.i + z.i * t; + } + b.r = a.r + z.r * (t = b.r) - z.i * b.i; + b.i = a.i + z.r * b.i + z.i * t; + a.r = z.r * (t = a.r) - z.i * a.i; + a.i = z.r * a.i + z.i * t; + *der = b; + return a; +} diff --git a/proj4/src/proj.c b/proj4/src/proj.c new file mode 100644 index 000000000000..e4524677c698 --- /dev/null +++ b/proj4/src/proj.c @@ -0,0 +1,504 @@ +/* <<<< Cartographic projection filter program >>>> */ +#include "projects.h" +#include +#include +#include +#include +#include +#include "emess.h" + +/* TK 1999-02-13 */ +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__WIN32__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +/* ! TK 1999-02-13 */ + +#define MAX_LINE 1000 +#define MAX_PARGS 100 +#define PJ_INVERS(P) (P->inv ? 1 : 0) + static PJ +*Proj; + static projUV +(*proj)(projUV, PJ *); + static int +reversein = 0, /* != 0 reverse input arguments */ +reverseout = 0, /* != 0 reverse output arguments */ +bin_in = 0, /* != 0 then binary input */ +bin_out = 0, /* != 0 then binary output */ +echoin = 0, /* echo input data to output line */ +tag = '#', /* beginning of line tag character */ +inverse = 0, /* != 0 then inverse projection */ +prescale = 0, /* != 0 apply cartesian scale factor */ +dofactors = 0, /* determine scale factors */ +facs_bad = 0, /* return condition from pj_factors */ +very_verby = 0, /* very verbose mode */ +postscale = 0; + static char +*cheby_str, /* string controlling Chebychev evaluation */ +*oform = (char *)0, /* output format for x-y or decimal degrees */ +*oterr = "*\t*", /* output line for unprojectable input */ +*usage = +"%s\nusage: %s [ -bCeEfiIlormsStTvVwW [args] ] [ +opts[=arg] ] [ files ]\n"; + static struct FACTORS +facs; + static double +(*informat)(const char *, char **), /* input data deformatter function */ +fscale = 0.; /* cartesian scale factor */ + static projUV +int_proj(projUV data) { + if (prescale) { data.u *= fscale; data.v *= fscale; } + data = (*proj)(data, Proj); + if (postscale && data.u != HUGE_VAL) + { data.u *= fscale; data.v *= fscale; } + return(data); +} + static void /* file processing function */ +process(FILE *fid) { + char line[MAX_LINE+3], *s, pline[40]; + projUV data; + + for (;;) { + ++emess_dat.File_line; + if (bin_in) { /* binary input */ + if (fread(&data, sizeof(projUV), 1, fid) != 1) + break; + } else { /* ascii input */ + if (!(s = fgets(line, MAX_LINE, fid))) + break; + if (!strchr(s, '\n')) { /* overlong line */ + int c; + (void)strcat(s, "\n"); + /* gobble up to newline */ + while ((c = fgetc(fid)) != EOF && c != '\n') ; + } + if (*s == tag) { + if (!bin_out) + (void)fputs(line, stdout); + continue; + } + if (reversein) { + data.v = (*informat)(s, &s); + data.u = (*informat)(s, &s); + } else { + data.u = (*informat)(s, &s); + data.v = (*informat)(s, &s); + } + if (data.v == HUGE_VAL) + data.u = HUGE_VAL; + if (!*s && (s > line)) --s; /* assumed we gobbled \n */ + if (!bin_out && echoin) { + int t; + t = *s; + *s = '\0'; + (void)fputs(line, stdout); + *s = t; + putchar('\t'); + } + } + if (data.u != HUGE_VAL) { + if (prescale) { data.u *= fscale; data.v *= fscale; } + if (dofactors && !inverse) + facs_bad = pj_factors(data, Proj, 0., &facs); + data = (*proj)(data, Proj); + if (dofactors && inverse) + facs_bad = pj_factors(data, Proj, 0., &facs); + if (postscale && data.u != HUGE_VAL) + { data.u *= fscale; data.v *= fscale; } + } + if (bin_out) { /* binary output */ + (void)fwrite(&data, sizeof(projUV), 1, stdout); + continue; + } else if (data.u == HUGE_VAL) /* error output */ + (void)fputs(oterr, stdout); + else if (inverse && !oform) { /*ascii DMS output */ + if (reverseout) { + (void)fputs(rtodms(pline, data.v, 'N', 'S'), stdout); + putchar('\t'); + (void)fputs(rtodms(pline, data.u, 'E', 'W'), stdout); + } else { + (void)fputs(rtodms(pline, data.u, 'E', 'W'), stdout); + putchar('\t'); + (void)fputs(rtodms(pline, data.v, 'N', 'S'), stdout); + } + } else { /* x-y or decimal degree ascii output */ + if (inverse) { + data.v *= RAD_TO_DEG; + data.u *= RAD_TO_DEG; + } + if (reverseout) { + (void)printf(oform,data.v); putchar('\t'); + (void)printf(oform,data.u); + } else { + (void)printf(oform,data.u); putchar('\t'); + (void)printf(oform,data.v); + } + } + if (dofactors) /* print scale factor data */ + { + if (!facs_bad) + (void)printf("\t<%g %g %g %g %g %g>", + facs.h, facs.k, facs.s, + facs.omega * RAD_TO_DEG, facs.a, facs.b); + else + (void)fputs("\t<* * * * * *>", stdout); + } + (void)fputs(bin_in ? "\n" : s, stdout); + } +} + static void /* file processing function --- verbosely */ +vprocess(FILE *fid) { + char line[MAX_LINE+3], *s, pline[40]; + projUV dat_ll, dat_xy; + int linvers; + + if (!oform) + oform = "%.3f"; + if (bin_in || bin_out) + emess(1,"binary I/O not available in -V option"); + for (;;) { + ++emess_dat.File_line; + if (!(s = fgets(line, MAX_LINE, fid))) + break; + if (!strchr(s, '\n')) { /* overlong line */ + int c; + (void)strcat(s, "\n"); + /* gobble up to newline */ + while ((c = fgetc(fid)) != EOF && c != '\n') ; + } + if (*s == tag) { /* pass on data */ + (void)fputs(s, stdout); + continue; + } + /* check to override default input mode */ + if (*s == 'I' || *s == 'i') { + linvers = 1; + ++s; + } else if (*s == 'I' || *s == 'i') { + linvers = 0; + ++s; + } else + linvers = inverse; + if (linvers) { + if (!PJ_INVERS(Proj)) { + emess(-1,"inverse for this projection not avail.\n"); + continue; + } + dat_xy.u = strtod(s, &s); + dat_xy.v = strtod(s, &s); + if (dat_xy.u == HUGE_VAL || dat_xy.v == HUGE_VAL) { + emess(-1,"lon-lat input conversion failure\n"); + continue; + } + if (prescale) { dat_xy.u *= fscale; dat_xy.v *= fscale; } + dat_ll = pj_inv(dat_xy, Proj); + } else { + dat_ll.u = dmstor(s, &s); + dat_ll.v = dmstor(s, &s); + if (dat_ll.u == HUGE_VAL || dat_ll.v == HUGE_VAL) { + emess(-1,"lon-lat input conversion failure\n"); + continue; + } + dat_xy = pj_fwd(dat_ll, Proj); + if (postscale) { dat_xy.u *= fscale; dat_xy.v *= fscale; } + } + if (pj_errno) { + emess(-1, pj_strerrno(pj_errno)); + continue; + } + if (!*s && (s > line)) --s; /* assumed we gobbled \n */ + if (pj_factors(dat_ll, Proj, 0., &facs)) { + emess(-1,"failed to conpute factors\n\n"); + continue; + } + if (*s != '\n') + (void)fputs(s, stdout); + (void)fputs("Longitude: ", stdout); + (void)fputs(rtodms(pline, dat_ll.u, 'E', 'W'), stdout); + (void)printf(" [ %.11g ]\n", dat_ll.u * RAD_TO_DEG); + (void)fputs("Latitude: ", stdout); + (void)fputs(rtodms(pline, dat_ll.v, 'N', 'S'), stdout); + (void)printf(" [ %.11g ]\n", dat_ll.v * RAD_TO_DEG); + (void)fputs("Easting (x): ", stdout); + (void)printf(oform, dat_xy.u); putchar('\n'); + (void)fputs("Northing (y): ", stdout); + (void)printf(oform, dat_xy.v); putchar('\n'); + (void)printf("Meridian scale (h)%c: %.8f ( %.4g %% error )\n", + facs.code & IS_ANAL_HK ? '*' : ' ', facs.h, (facs.h-1.)*100.); + (void)printf("Parallel scale (k)%c: %.8f ( %.4g %% error )\n", + facs.code & IS_ANAL_HK ? '*' : ' ', facs.k, (facs.k-1.)*100.); + (void)printf("Areal scale (s): %.8f ( %.4g %% error )\n", + facs.s, (facs.s-1.)*100.); + (void)printf("Angular distortion (w): %.3f\n", facs.omega * + RAD_TO_DEG); + (void)printf("Meridian/Parallel angle: %.5f\n", + facs.thetap * RAD_TO_DEG); + (void)printf("Convergence%c: ",facs.code & IS_ANAL_CONV ? '*' : ' '); + (void)fputs(rtodms(pline, facs.conv, 0, 0), stdout); + (void)printf(" [ %.8f ]\n", facs.conv * RAD_TO_DEG); + (void)printf("Max-min (Tissot axis a-b) scale error: %.5f %.5f\n\n", + facs.a, facs.b); + } +} + +int main(int argc, char **argv) { + char *arg, **eargv = argv, *pargv[MAX_PARGS], **iargv = argv; + FILE *fid; + int pargc = 0, iargc = argc, eargc = 0, c, mon = 0; + + if ( (emess_dat.Prog_name = strrchr(*argv,DIR_CHAR)) != NULL) + ++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 'b': /* binary I/O */ + bin_in = bin_out = 1; + continue; + case 'C': /* Check - run internal regression tests */ + return pj_run_selftests (very_verby); + continue; + case 'v': /* monitor dump of initialization */ + mon = 1; + continue; + case 'i': /* input binary */ + bin_in = 1; + continue; + case 'o': /* output binary */ + bin_out = 1; + continue; + case 'I': /* alt. method to spec inverse */ + inverse = 1; + continue; + case 'E': /* echo ascii input to ascii output */ + echoin = 1; + continue; + case 'V': /* very verbose processing mode */ + very_verby = 1; + mon = 1; + case 'S': /* compute scale factors */ + dofactors = 1; + continue; + case 't': /* set col. one char */ + if (arg[1]) tag = *++arg; + else emess(1,"missing -t col. 1 tag"); + continue; + case 'l': /* list projections, ellipses or units */ + if (!arg[1] || arg[1] == 'p' || arg[1] == 'P') { + /* list projections */ + struct PJ_LIST *lp; + int do_long = arg[1] == 'P', c; + char *str; + + for (lp = pj_get_list_ref() ; lp->id ; ++lp) { + if( strcmp(lp->id,"latlong") == 0 + || strcmp(lp->id,"longlat") == 0 + || strcmp(lp->id,"geocent") == 0 ) + continue; + + (void)printf("%s : ", lp->id); + if (do_long) /* possibly multiline description */ + (void)puts(*lp->descr); + else { /* first line, only */ + str = *lp->descr; + while ((c = *str++) && c != '\n') + putchar(c); + putchar('\n'); + } + } + } else if (arg[1] == '=') { /* list projection 'descr' */ + struct PJ_LIST *lp; + + arg += 2; + for (lp = pj_get_list_ref(); lp->id ; ++lp) + if (!strcmp(lp->id, arg)) { + (void)printf("%9s : %s\n", lp->id, *lp->descr); + break; + } + } else if (arg[1] == 'e') { /* list ellipses */ + 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 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 if (arg[1] == 'd') { /* list datums */ + struct PJ_DATUMS *ld; + + printf("__datum_id__ __ellipse___ __definition/comments______________________________\n" ); + for (ld = pj_get_datums_ref(); ld->id ; ++ld) + { + printf("%12s %-12s %-30s\n", + ld->id, ld->ellipse_id, ld->defn); + if( ld->comments != NULL && strlen(ld->comments) > 0 ) + printf( "%25s %s\n", " ", ld->comments ); + } + } else + emess(1,"invalid list option: l%c",arg[1]); + exit(0); + continue; /* artificial */ + case 'e': /* error line alternative */ + if (--argc <= 0) + noargument: + emess(1,"missing argument for -%c",*arg); + oterr = *++argv; + continue; + case 'T': /* generate Chebyshev coefficients */ + if (--argc <= 0) goto noargument; + cheby_str = *++argv; + continue; + case 'm': /* cartesian multiplier */ + if (--argc <= 0) goto noargument; + postscale = 1; + if (!strncmp("1/",*++argv,2) || + !strncmp("1:",*argv,2)) { + if((fscale = atof((*argv)+2)) == 0.) + goto badscale; + fscale = 1. / fscale; + } else + if ((fscale = atof(*argv)) == 0.) { + badscale: + emess(1,"invalid scale argument"); + } + continue; + case 'W': /* specify seconds precision */ + case 'w': /* -W for constant field width */ + if ((c = arg[1]) != 0 && 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) goto noargument; + oform = *++argv; + continue; + case 'r': /* reverse input */ + reversein = 1; + continue; + case 's': /* reverse output */ + reverseout = 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; + } + if (eargc == 0 && !cheby_str) /* if no specific files force sysin */ + eargv[eargc++] = "-"; + else if (eargc > 0 && cheby_str) /* warning */ + emess(4, "data files when generating Chebychev prohibited"); + /* done with parameter and control input */ + if (inverse && postscale) { + prescale = 1; + postscale = 0; + fscale = 1./fscale; + } + if (!(Proj = pj_init(pargc, pargv))) + emess(3,"projection initialization failure\ncause: %s", + pj_strerrno(pj_errno)); + + if( pj_is_latlong( Proj ) ) + { + emess( 3, "+proj=latlong unsuitable for use with proj program." ); + exit( 0 ); + } + + if (inverse) { + if (!Proj->inv) + emess(3,"inverse projection not available"); + proj = pj_inv; + } else + proj = pj_fwd; + if (cheby_str) { + extern void gen_cheb(int, projUV(*)(projUV), char *, PJ *, int, char **); + + gen_cheb(inverse, int_proj, cheby_str, Proj, iargc, iargv); + exit(0); + } + /* set input formating control */ + if (mon) { + pj_pr_list(Proj); + if (very_verby) { + (void)printf("#Final Earth figure: "); + if (Proj->es) { + (void)printf("ellipsoid\n# Major axis (a): "); + (void)printf(oform ? oform : "%.3f", Proj->a); + (void)printf("\n# 1/flattening: %.6f\n", + 1./(1. - sqrt(1. - Proj->es))); + (void)printf("# squared eccentricity: %.12f\n", Proj->es); + } else { + (void)printf("sphere\n# Radius: "); + (void)printf(oform ? oform : "%.3f", Proj->a); + (void)putchar('\n'); + } + } + } + if (inverse) + informat = strtod; + else { + informat = dmstor; + if (!oform) + oform = "%.2f"; + } + + if (bin_out) + { + SET_BINARY_MODE(stdout); + } + + /* process input file list */ + for ( ; eargc-- ; ++eargv) { + if (**eargv == '-') { + fid = stdin; + emess_dat.File_name = ""; + + if (bin_in) + { + SET_BINARY_MODE(stdin); + } + + } else { + if ((fid = fopen(*eargv, "rb")) == NULL) { + emess(-2, *eargv, "input file"); + continue; + } + emess_dat.File_name = *eargv; + } + emess_dat.File_line = 0; + if (very_verby) + vprocess(fid); + else + process(fid); + (void)fclose(fid); + emess_dat.File_name = 0; + } + if( Proj ) + pj_free(Proj); + exit(0); /* normal completion */ +} diff --git a/proj4/src/proj.def b/proj4/src/proj.def new file mode 100644 index 000000000000..1f228a6c359a --- /dev/null +++ b/proj4/src/proj.def @@ -0,0 +1,91 @@ +VERSION 1.2 +EXPORTS + pj_init @1 + pj_fwd @2 + pj_inv @3 + pj_free @4 + pj_transform @5 + pj_geocentric_to_geodetic @6 + pj_geodetic_to_geocentric @7 + pj_deallocate_grids @8 + pj_init_plus @9 + pj_latlong_from_proj @10 + pj_is_latlong @11 + pj_get_errno_ref @12 + pj_set_finder @13 + pj_strerrno @14 + pj_errno @15 + pj_get_def @16 + pj_dalloc @17 + pj_is_geocent @18 + pj_get_release @19 + pj_malloc @20 + pj_pr_list @21 + pj_compare_datums @22 + pj_apply_gridshift @23 + pj_datum_transform @24 + pj_set_searchpath @25 + dmstor @26 + pj_get_ellps_ref @27 + pj_get_datums_ref @28 + pj_get_units_ref @29 + pj_get_list_ref @30 + pj_get_prime_meridians_ref @31 + rtodms @32 + set_rtodms @33 + pj_factors @34 + mk_cheby @35 + adjlon @36 + pj_param @37 + pj_ell_set @38 + pj_mkparam @39 + pj_init_ctx @40 + pj_init_plus_ctx @41 + pj_get_default_ctx @42 + pj_get_ctx @43 + pj_set_ctx @44 + pj_ctx_alloc @45 + pj_ctx_free @46 + pj_ctx_get_errno @47 + pj_ctx_set_errno @48 + pj_ctx_set_debug @49 + pj_ctx_set_logger @50 + pj_ctx_set_app_data @51 + pj_ctx_get_app_data @52 + pj_log @53 + pj_clear_initcache @54 + geod_init @55 + geod_lineinit @56 + geod_genposition @57 + geod_position @58 + geod_gendirect @59 + geod_direct @60 + geod_geninverse @61 + geod_inverse @62 + geod_polygonarea @63 + pj_get_spheroid_defn @64 + pj_get_default_fileapi @65 + pj_ctx_set_fileapi @66 + pj_ctx_get_fileapi @67 + pj_ctx_fopen @68 + pj_ctx_fread @69 + pj_ctx_ftell @70 + pj_ctx_fclose @71 + pj_open_lib @72 + pj_atof @73 + pj_strtod @74 + pj_fwd3d @75 + pj_inv3d @76 + geod_gensetdistance @77 + geod_setdistance @78 + geod_gendirectline @79 + geod_directline @80 + geod_inverseline @81 + geod_polygon_init @82 + geod_polygon_addedge @83 + geod_polygon_addpoint @84 + geod_polygon_compute @85 + geod_polygon_testedge @86 + geod_polygon_testpoint @87 + geod_polygon_clear @88 + pj_run_selftests @89 diff --git a/proj4/src/proj_api.h b/proj4/src/proj_api.h new file mode 100644 index 000000000000..24a6f053958a --- /dev/null +++ b/proj4/src/proj_api.h @@ -0,0 +1,184 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Public (application) include file for PROJ.4 API, and constants. + * Author: Frank Warmerdam, + * + ****************************************************************************** + * Copyright (c) 2001, 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. + *****************************************************************************/ + +/* General projections header file */ +#ifndef PROJ_API_H +#define PROJ_API_H + +/* standard inclusions */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This version number should be updated with every release! The format of + * PJ_VERSION is + * + * * Before version 4.10.0: PJ_VERSION=MNP where M, N, and P are the major, + * minor, and patch numbers; e.g., PJ_VERSION=493 for version 4.9.3. + * + * * Version 4.10.0 and later: PJ_VERSION=MMMNNNPP later where MMM, NNN, PP + * are the major, minor, and patch numbers (the minor and patch numbers + * are padded with leading zeros if necessary); e.g., PJ_VERSION=401000 + * for version 4.10.0. + */ +#define PJ_VERSION 493 + +/* pj_init() and similar functions can be used with a non-C locale */ +/* Can be detected too at runtime if the symbol pj_atof exists */ +#define PJ_LOCALE_SAFE 1 + +extern char const pj_release[]; /* global release id string */ + +#define RAD_TO_DEG 57.295779513082321 +#define DEG_TO_RAD .017453292519943296 + + +extern int pj_errno; /* global error return code */ + +#if !defined(PROJECTS_H) + typedef struct { double u, v; } projUV; + typedef struct { double u, v, w; } projUVW; + typedef void *projPJ; + #define projXY projUV + #define projLP projUV + #define projXYZ projUVW + #define projLPZ projUVW + typedef void *projCtx; +#else + typedef PJ *projPJ; + typedef projCtx_t *projCtx; +# define projXY XY +# define projLP LP +# define projXYZ XYZ +# define projLPZ LPZ +#endif + +/* file reading api, like stdio */ +typedef int *PAFile; +typedef struct projFileAPI_t { + PAFile (*FOpen)(projCtx ctx, const char *filename, const char *access); + size_t (*FRead)(void *buffer, size_t size, size_t nmemb, PAFile file); + int (*FSeek)(PAFile file, long offset, int whence); + long (*FTell)(PAFile file); + void (*FClose)(PAFile); +} projFileAPI; + +/* procedure prototypes */ + +projXY pj_fwd(projLP, projPJ); +projLP pj_inv(projXY, projPJ); + +projXYZ pj_fwd3d(projLPZ, projPJ); +projLPZ pj_inv3d(projXYZ, projPJ); + +int pj_transform( projPJ src, projPJ dst, long point_count, int point_offset, + double *x, double *y, double *z ); +int pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset, + double *x, double *y, double *z ); +int pj_geocentric_to_geodetic( double a, double es, + long point_count, int point_offset, + double *x, double *y, double *z ); +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( 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); +void pj_dalloc(void *); +void *pj_calloc (size_t n, size_t size); +void *pj_dealloc (void *ptr); +char *pj_strerrno(int); +int *pj_get_errno_ref(void); +const char *pj_get_release(void); +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_ctx_set_fileapi( projCtx, projFileAPI *); +projFileAPI *pj_ctx_get_fileapi( projCtx ); + +void pj_log( projCtx ctx, int level, const char *fmt, ... ); +void pj_stderr_logger( void *, int, const char * ); + +/* file api */ +projFileAPI *pj_get_default_fileapi(); + +PAFile pj_ctx_fopen(projCtx ctx, const char *filename, const char *access); +size_t pj_ctx_fread(projCtx ctx, void *buffer, size_t size, size_t nmemb, PAFile file); +int pj_ctx_fseek(projCtx ctx, PAFile file, long offset, int whence); +long pj_ctx_ftell(projCtx ctx, PAFile file); +void pj_ctx_fclose(projCtx ctx, PAFile file); +char *pj_ctx_fgets(projCtx ctx, char *line, int size, PAFile file); + +PAFile pj_open_lib(projCtx, const char *, const char *); + +int pj_run_selftests (int verbosity); + + +#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 + +#endif /* ndef PROJ_API_H */ + diff --git a/proj4/src/proj_config.h.wince b/proj4/src/proj_config.h.wince new file mode 100644 index 000000000000..9e2c8a6798d6 --- /dev/null +++ b/proj4/src/proj_config.h.wince @@ -0,0 +1,66 @@ +/* + * Windows CE platform config. + */ +#ifndef _WIN32_WCE +# error This version of proj_config.h header is dedicated for Windows CE platform! +#endif + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `m' library (-lm). */ +#undef HAVE_LIBM + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Enabled for Java/JNI Support */ +#undef JNI_ENABLED + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/proj4/src/proj_etmerc.c b/proj4/src/proj_etmerc.c new file mode 100644 index 000000000000..aed1499ed2aa --- /dev/null +++ b/proj4/src/proj_etmerc.c @@ -0,0 +1,479 @@ +/* +** 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_LIB__ +#define PJ_LIB__ + +#include + + +struct pj_opaque { + double Qn; /* Merid. quad., scaled to the projection */ \ + double Zb; /* Radius vector in polar coord. systems */ \ + double cgb[6]; /* Constants for Gauss -> Geo lat */ \ + double cbg[6]; /* Constants for Geo lat -> Gauss */ \ + double utg[6]; /* Constants for transv. merc. -> geo */ \ + double gtu[6]; /* Constants for geo -> transv. merc. */ +}; + +PROJ_HEAD(etmerc, "Extended Transverse Mercator") + "\n\tCyl, Sph\n\tlat_ts=(0)\nlat_0=(0)"; +PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") + "\n\tCyl, Sph\n\tzone= south"; + +#define PROJ_ETMERC_ORDER 6 + + +#ifdef _GNU_SOURCE + inline +#endif +static double log1py(double x) { /* Compute log(1+x) accurately */ + volatile double + 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; +} + + +#ifdef _GNU_SOURCE + inline +#endif +static double asinhy(double x) { /* Compute asinh(x) accurately */ + double y = fabs(x); /* Enforce odd parity */ + y = log1py(y * (1 + y/(hypot(1.0, y) + 1))); + return x < 0 ? -y : y; +} + + +#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*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*B)); +} + +/* Complex Clenshaw summation */ +#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; + + /* 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 + sinh_arg_i = sinh(arg_i); + cosh_arg_i = cosh(arg_i); + r = 2*cos_arg_r*cosh_arg_i; + i = -2*sin_arg_r*sinh_arg_i; + + /* summation loop */ + for (hi1 = hr1 = hi = 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; +} + + +/* Real Clenshaw summation */ +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*cos_arg_r; + + /* summation loop */ + for (hr1 = 0, hr = *--p; a - p;) { + hr2 = hr1; + hr1 = hr; + hr = -hr2 + r*hr1 + *--p; + } + return sin (arg_r)*hr; +} + + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + 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 (Q->cbg, PROJ_ETMERC_ORDER, 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 = asinhy ( tan (Ce) ); /* Replaces: Ce = log(tan(FORTPI + Ce*0.5)); */ + Cn += clenS (Q->gtu, PROJ_ETMERC_ORDER, 2*Cn, 2*Ce, &dCn, &dCe); + Ce += dCe; + if (fabs (Ce) <= 2.623395162778) { + xy.y = Q->Qn * Cn + Q->Zb; /* Northing */ + xy.x = Q->Qn * Ce; /* Easting */ + } else + xy.x = xy.y = HUGE_VAL; + return xy; +} + + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double sin_Cn, cos_Cn, cos_Ce, sin_Ce, dCn, dCe; + double Cn = xy.y, Ce = xy.x; + + /* normalize N, E */ + Cn = (Cn - Q->Zb)/Q->Qn; + Ce = Ce/Q->Qn; + + if (fabs(Ce) <= 2.623395162778) { /* 150 degrees */ + /* norm. N, E -> compl. sph. LAT, LNG */ + Cn += clenS(Q->utg, PROJ_ETMERC_ORDER, 2*Cn, 2*Ce, &dCn, &dCe); + Ce += dCe; + Ce = atan (sinh (Ce)); /* Replaces: Ce = 2*(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 (Q->cgb, PROJ_ETMERC_ORDER, Cn); + lp.lam = Ce; + } + else + lp.phi = lp.lam = HUGE_VAL; + return lp; +} + + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + +static PJ *setup(PJ *P) { /* general initialization */ + double f, n, np, Z; + struct pj_opaque *Q = P->opaque; + + if (P->es <= 0) + E_ERROR(-34); + + /* flattening */ + f = P->es / (1 + sqrt (1 - P->es)); /* Replaces: f = 1 - sqrt(1-P->es); */ + + /* third flattening */ + np = n = f/(2 - f); + + /* COEF. OF TRIG SERIES GEO <-> GAUSS */ + /* cgb := Gaussian -> Geodetic, KW p190 - 191 (61) - (62) */ + /* cbg := Geodetic -> Gaussian, KW p186 - 187 (51) - (52) */ + /* PROJ_ETMERC_ORDER = 6th degree : Engsager and Poder: ICC2007 */ + + Q->cgb[0] = n*( 2 + n*(-2/3.0 + n*(-2 + n*(116/45.0 + n*(26/45.0 + + n*(-2854/675.0 )))))); + Q->cbg[0] = n*(-2 + n*( 2/3.0 + n*( 4/3.0 + n*(-82/45.0 + n*(32/45.0 + + n*( 4642/4725.0)))))); + np *= n; + Q->cgb[1] = np*(7/3.0 + n*( -8/5.0 + n*(-227/45.0 + n*(2704/315.0 + + n*( 2323/945.0))))); + Q->cbg[1] = np*(5/3.0 + n*(-16/15.0 + n*( -13/9.0 + n*( 904/315.0 + + n*(-1522/945.0))))); + np *= n; + /* n^5 coeff corrected from 1262/105 -> -1262/105 */ + Q->cgb[2] = np*( 56/15.0 + n*(-136/35.0 + n*(-1262/105.0 + + n*( 73814/2835.0)))); + Q->cbg[2] = np*(-26/15.0 + n*( 34/21.0 + n*( 8/5.0 + + n*(-12686/2835.0)))); + np *= n; + /* n^5 coeff corrected from 322/35 -> 332/35 */ + Q->cgb[3] = np*(4279/630.0 + n*(-332/35.0 + n*(-399572/14175.0))); + Q->cbg[3] = np*(1237/630.0 + n*( -12/5.0 + n*( -24832/14175.0))); + np *= n; + Q->cgb[4] = np*(4174/315.0 + n*(-144838/6237.0 )); + Q->cbg[4] = np*(-734/315.0 + n*( 109598/31185.0)); + np *= n; + Q->cgb[5] = np*(601676/22275.0 ); + Q->cbg[5] = np*(444337/155925.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) */ + Q->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) */ + Q->utg[0] = n*(-0.5 + n*( 2/3.0 + n*(-37/96.0 + n*( 1/360.0 + + n*( 81/512.0 + n*(-96199/604800.0)))))); + Q->gtu[0] = n*( 0.5 + n*(-2/3.0 + n*( 5/16.0 + n*(41/180.0 + + n*(-127/288.0 + n*( 7891/37800.0 )))))); + Q->utg[1] = np*(-1/48.0 + n*(-1/15.0 + n*(437/1440.0 + n*(-46/105.0 + + n*( 1118711/3870720.0))))); + Q->gtu[1] = np*(13/48.0 + n*(-3/5.0 + n*(557/1440.0 + n*(281/630.0 + + n*(-1983433/1935360.0))))); + np *= n; + Q->utg[2] = np*(-17/480.0 + n*( 37/840.0 + n*( 209/4480.0 + + n*( -5569/90720.0 )))); + Q->gtu[2] = np*( 61/240.0 + n*(-103/140.0 + n*(15061/26880.0 + + n*(167603/181440.0)))); + np *= n; + Q->utg[3] = np*(-4397/161280.0 + n*( 11/504.0 + n*( 830251/7257600.0))); + Q->gtu[3] = np*(49561/161280.0 + n*(-179/168.0 + n*(6601661/7257600.0))); + np *= n; + Q->utg[4] = np*(-4583/161280.0 + n*( 108847/3991680.0)); + Q->gtu[4] = np*(34729/80640.0 + n*(-3418889/1995840.0)); + np *= n; + Q->utg[5] = np*(-20648693/638668800.0); + Q->gtu[5] = np*(212378941/319334400.0); + + /* Gaussian latitude value of the origin latitude */ + Z = gatg (Q->cbg, PROJ_ETMERC_ORDER, P->phi0); + + /* Origin northing minus true northing at the origin latitude */ + /* i.e. true northing = N - P->Zb */ + Q->Zb = - Q->Qn*(Z + clens(Q->gtu, PROJ_ETMERC_ORDER, 2*Z)); + P->inv = e_inverse; + P->fwd = e_forward; + return P; +} + + + +PJ *PROJECTION(etmerc) { + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + return setup (P); +} + + + + + + + +#ifndef PJ_SELFTEST +int pj_etmerc_selftest (void) {return 0;} +#else + +int pj_etmerc_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=etmerc +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5 +zone=30"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {222650.79679758562, 110642.22941193319}, + {222650.79679758562, -110642.22941193319}, + {-222650.79679758562, 110642.22941193319}, + {-222650.79679758562, -110642.22941193319}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {0.0017966305681649398, 0.00090436947663183873}, + {0.0017966305681649398, -0.00090436947663183873}, + {-0.0017966305681649398, 0.00090436947663183873}, + {-0.0017966305681649398, -0.00090436947663183873}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} +#endif + + + + + + + + + + + + +/* utm uses etmerc for the underlying projection */ + + +PJ *PROJECTION(utm) { + int zone; + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (!P->es) + E_ERROR(-34); + P->y0 = pj_param (P->ctx, P->params, "bsouth").i ? 10000000. : 0.; + P->x0 = 500000.; + 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) + else /* nearest central meridian input */ + if ((zone = (int)(floor ((adjlon (P->lam0) + M_PI) * 30. / M_PI))) < 0) + zone = 0; + else if (zone >= 60) + zone = 59; + P->lam0 = (zone + .5) * M_PI / 30. - M_PI; + P->k0 = 0.9996; + P->phi0 = 0.; + + return setup (P); +} + + +#ifndef PJ_SELFTEST +int pj_utm_selftest (void) {return 0;} +#else + +int pj_utm_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=utm +ellps=GRS80 +lat_1=0.5 +lat_2=2 +n=0.5 +zone=30"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + {1057002.4054912981, 110955.14117594929}, + {1057002.4054912981, -110955.14117594929}, + {611263.81227890507, 110547.10569680421}, + {611263.81227890507, -110547.10569680421}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + {-7.4869520833902357, 0.00090193980983462605}, + {-7.4869520833902357, -0.00090193980983462605}, + {-7.4905356820622613, 0.00090193535121489081}, + {-7.4905356820622613, -0.00090193535121489081}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} +#endif + + + diff --git a/proj4/src/proj_mdist.c b/proj4/src/proj_mdist.c new file mode 100644 index 000000000000..d7e43443a4be --- /dev/null +++ b/proj4/src/proj_mdist.c @@ -0,0 +1,121 @@ +/* +** libproj -- library of cartographic projections +** +** 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. +*/ +/* Computes distance from equator along the meridian to latitude phi +** and inverse on unit ellipsoid. +** Precision commensurate with double precision. +*/ +#define PROJ_LIB__ +#include +#define MAX_ITER 20 +#define TOL 1e-14 + +struct MDIST { + int nb; + double es; + double E; + double b[1]; +}; +#define B ((struct MDIST *)b) + void * +proj_mdist_ini(double es) { + double numf, numfi, twon1, denf, denfi, ens, T, twon; + double den, El, Es; + double E[MAX_ITER]; + struct MDIST *b; + int i, j; + +/* generate E(e^2) and its terms E[] */ + ens = es; + numf = twon1 = denfi = 1.; + denf = 1.; + twon = 4.; + Es = El = E[0] = 1.; + for (i = 1; i < MAX_ITER ; ++i) { + numf *= (twon1 * twon1); + den = twon * denf * denf * twon1; + T = numf/den; + Es -= (E[i] = T * ens); + ens *= es; + twon *= 4.; + denf *= ++denfi; + twon1 += 2.; + if (Es == El) /* jump out if no change */ + break; + El = Es; + } + if ((b = (struct MDIST *)malloc(sizeof(struct MDIST)+ + (i*sizeof(double)))) == NULL) + return(NULL); + b->nb = i - 1; + b->es = es; + b->E = Es; + /* generate b_n coefficients--note: collapse with prefix ratios */ + b->b[0] = Es = 1. - Es; + numf = denf = 1.; + numfi = 2.; + denfi = 3.; + for (j = 1; j < i; ++j) { + Es -= E[j]; + numf *= numfi; + denf *= denfi; + b->b[j] = Es * numf / denf; + numfi += 2.; + denfi += 2.; + } + return (b); +} + double +proj_mdist(double phi, double sphi, double cphi, const void *b) { + double sc, sum, sphi2, D; + int i; + + sc = sphi * cphi; + sphi2 = sphi * sphi; + D = phi * B->E - B->es * sc / sqrt(1. - B->es * sphi2); + sum = B->b[i = B->nb]; + while (i) sum = B->b[--i] + sphi2 * sum; + return(D + sc * sum); +} + double +proj_inv_mdist(projCtx ctx, double dist, const void *b) { + double s, t, phi, k; + int i; + + k = 1./(1.- B->es); + i = MAX_ITER; + phi = dist; + while ( i-- ) { + s = sin(phi); + t = 1. - B->es * s * s; + phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) * + (t * sqrt(t)) * k; + if (fabs(t) < TOL) /* that is no change */ + return phi; + } + /* convergence failed */ + pj_ctx_set_errno(ctx, -17); + return phi; +} diff --git a/proj4/src/proj_rouss.c b/proj4/src/proj_rouss.c new file mode 100644 index 000000000000..264b1b7720d5 --- /dev/null +++ b/proj4/src/proj_rouss.c @@ -0,0 +1,198 @@ +/* +** libproj -- library of cartographic projections +** +** 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 PJ_LIB__ +#include + +struct pj_opaque { + double s0; + double A1, A2, A3, A4, A5, A6; + double B1, B2, B3, B4, B5, B6, B7, B8; + double C1, C2, C3, C4, C5, C6, C7, C8; + double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11; + void *en; +}; +PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi., Ellps."; + + +static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ + XY xy = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double s, al, cp, sp, al2, s2; + + cp = cos(lp.phi); + sp = sin(lp.phi); + s = proj_mdist(lp.phi, sp, cp, Q->en) - Q->s0; + s2 = s * s; + al = lp.lam * cp / sqrt(1. - P->es * sp * sp); + al2 = al * al; + xy.x = P->k0 * al*(1.+s2*(Q->A1+s2*Q->A4)-al2*(Q->A2+s*Q->A3+s2*Q->A5 + +al2*Q->A6)); + xy.y = P->k0 * (al2*(Q->B1+al2*Q->B4)+ + s*(1.+al2*(Q->B3-al2*Q->B6)+s2*(Q->B2+s2*Q->B8)+ + s*al2*(Q->B5+s*Q->B7))); + + return xy; +} + + +static LP e_inverse (XY xy, PJ *P) { /* Ellipsoidal, inverse */ + LP lp = {0.0,0.0}; + struct pj_opaque *Q = P->opaque; + double s, al, x = xy.x / P->k0, y = xy.y / P->k0, x2, y2;; + + x2 = x * x; + y2 = y * y; + al = x*(1.-Q->C1*y2+x2*(Q->C2+Q->C3*y-Q->C4*x2+Q->C5*y2-Q->C7*x2*y) + +y2*(Q->C6*y2-Q->C8*x2*y)); + s = Q->s0 + y*(1.+y2*(-Q->D2+Q->D8*y2))+ + x2*(-Q->D1+y*(-Q->D3+y*(-Q->D5+y*(-Q->D7+y*Q->D11)))+ + x2*(Q->D4+y*(Q->D6+y*Q->D10)-x2*Q->D9)); + lp.phi=proj_inv_mdist(P->ctx, s, Q->en); + s = sin(lp.phi); + lp.lam=al * sqrt(1. - P->es * s * s)/cos(lp.phi); + + return lp; +} + + +static void *freeup_new (PJ *P) { /* Destructor */ + if (0==P) + return 0; + if (0==P->opaque) + return pj_dealloc (P); + + if (P->opaque->en) + pj_dealloc (P->opaque->en); + pj_dealloc (P->opaque); + return pj_dealloc(P); +} + +static void freeup (PJ *P) { + freeup_new (P); + return; +} + + +PJ *PROJECTION(rouss) { + double N0, es2, t, t2, R_R0_2, R_R0_4; + + struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); + if (0==Q) + return freeup_new (P); + P->opaque = Q; + + if (!((Q->en = proj_mdist_ini(P->es)))) + E_ERROR_0; + es2 = sin(P->phi0); + Q->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), Q->en); + t = 1. - (es2 = P->es * es2 * es2); + N0 = 1./sqrt(t); + R_R0_2 = t * t / P->one_es; + R_R0_4 = R_R0_2 * R_R0_2; + t = tan(P->phi0); + t2 = t * t; + Q->C1 = Q->A1 = R_R0_2 / 4.; + Q->C2 = Q->A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.; + Q->A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0); + Q->A4 = R_R0_4 / 24.; + Q->A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.; + Q->A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.; + Q->B1 = t / (2. * N0); + Q->B2 = R_R0_2 / 12.; + Q->B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.; + Q->B4 = R_R0_2 * t * (2. - t2)/(24. * N0); + Q->B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0); + Q->B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.; + Q->B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.; + Q->B8 = R_R0_4 / 120.; + Q->C3 = R_R0_2 * t * (1. + t2)/(3. * N0); + Q->C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.; + Q->C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.; + Q->C6 = R_R0_4 / 16.; + Q->C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0); + Q->C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0); + Q->D1 = t / (2. * N0); + Q->D2 = R_R0_2 / 12.; + Q->D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.; + Q->D4 = R_R0_2 * t * (1. + t2)/(8. * N0); + Q->D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0); + Q->D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.; + Q->D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.; + Q->D8 = R_R0_4 / 80.; + Q->D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.; + Q->D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0); + Q->D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0); + + P->fwd = e_forward; + P->inv = e_inverse; + + return P; +} + + +#ifndef PJ_SELFTEST +int pj_rouss_selftest (void) {return 0;} +#else + +int pj_rouss_selftest (void) { + double tolerance_lp = 1e-10; + double tolerance_xy = 1e-7; + + char e_args[] = {"+proj=rouss +ellps=GRS80 +lat_1=0.5 +lat_2=2"}; + + LP fwd_in[] = { + { 2, 1}, + { 2,-1}, + {-2, 1}, + {-2,-1} + }; + + XY e_fwd_expect[] = { + { 222644.89413161727, 110611.09186837047}, + { 222644.89413161727, -110611.09186837047}, + {-222644.89413161727, 110611.09186837047}, + {-222644.89413161727, -110611.09186837047}, + }; + + XY inv_in[] = { + { 200, 100}, + { 200,-100}, + {-200, 100}, + {-200,-100} + }; + + LP e_inv_expect[] = { + { 0.0017966305682019911, 0.00090436947683699559}, + { 0.0017966305682019911, -0.00090436947683699559}, + {-0.0017966305682019911, 0.00090436947683699559}, + {-0.0017966305682019911, -0.00090436947683699559}, + }; + + return pj_generic_selftest (e_args, 0, tolerance_xy, tolerance_lp, 4, 4, fwd_in, e_fwd_expect, 0, inv_in, e_inv_expect, 0); +} + + +#endif diff --git a/proj4/src/projects.h b/proj4/src/projects.h new file mode 100644 index 000000000000..5b8831333942 --- /dev/null +++ b/proj4/src/projects.h @@ -0,0 +1,600 @@ +/****************************************************************************** + * Project: PROJ.4 + * Purpose: Primary (private) include file for PROJ.4 library. + * Author: Gerald Evenden + * + ****************************************************************************** + * Copyright (c) 2000, 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. + *****************************************************************************/ + +/* General projections header file */ +#ifndef PROJECTS_H +#define PROJECTS_H + +#ifdef _MSC_VER +# ifndef _CRT_SECURE_NO_DEPRECATE +# define _CRT_SECURE_NO_DEPRECATE +# endif +# ifndef _CRT_NONSTDC_NO_DEPRECATE +# define _CRT_NONSTDC_NO_DEPRECATE +# endif +/* enable predefined math constants M_* for MS Visual Studio workaround */ +# define _USE_MATH_DEFINES +#endif + +/* standard inclusions */ +#include +#include +#include +#include + +#ifdef __cplusplus +#define C_NAMESPACE extern "C" +#define C_NAMESPACE_VAR extern "C" +extern "C" { +#else +#define C_NAMESPACE extern +#define C_NAMESPACE_VAR +#endif + +#ifndef NULL +# define NULL 0 +#endif + +#ifndef FALSE +# define FALSE 0 +#endif + +#ifndef TRUE +# define TRUE 1 +#endif + +#ifndef MAX +# define MIN(a,b) ((ab) ? a : b) +#endif + +#ifndef ABS +# define ABS(x) ((x<0) ? (-1*(x)) : x) +#endif + +/* maximum path/filename */ +#ifndef MAX_PATH_FILENAME +#define MAX_PATH_FILENAME 1024 +#endif + +/* prototype hypot for systems where absent */ +#ifndef _WIN32 +extern double hypot(double, double); +#endif + +#ifdef _WIN32_WCE +# include +# include +# define rewind wceex_rewind +# define getenv wceex_getenv +# define strdup _strdup +# define hypot _hypot +#endif + +/* If we still haven't got M_PI*, we rely on our own defines. + * For example, this is necessary when compiling with gcc and + * the -ansi flag. + */ +#ifndef M_PI +#define M_PI 3.14159265358979310 +#define M_PI_2 1.57079632679489660 +#define M_PI_4 0.78539816339744828 +#endif + +/* some more useful math constants and aliases */ +#define M_FORTPI M_PI_4 /* pi/4 */ +#define M_HALFPI M_PI_2 /* pi/2 */ +#define M_PI_HALFPI 4.71238898038468985769 /* 1.5*pi */ +#define M_TWOPI 6.28318530717958647693 /* 2*pi */ +#define M_TWO_D_PI M_2_PI /* 2/pi */ +#define M_TWOPI_HALFPI 7.85398163397448309616 /* 2.5*pi */ + + +/* maximum tag id length for +init and default files */ +#ifndef ID_TAG_MAX +#define ID_TAG_MAX 50 +#endif + +/* Use WIN32 as a standard windows 32 bit declaration */ +#if defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) +# define WIN32 +#endif + +#if defined(_WINDOWS) && !defined(WIN32) && !defined(_WIN32_WCE) +# define WIN32 +#endif + +/* directory delimiter for DOS support */ +#ifdef WIN32 +#define DIR_CHAR '\\' +#else +#define DIR_CHAR '/' +#endif + +struct projFileAPI_t; + +/* proj thread context */ +typedef struct { + int last_errno; + int debug_level; + void (*logger)(void *, int, const char *); + void *app_data; + struct projFileAPI_t *fileapi; +} projCtx_t; + +/* datum_type values */ +#define PJD_UNKNOWN 0 +#define PJD_3PARAM 1 +#define PJD_7PARAM 2 +#define PJD_GRIDSHIFT 3 +#define PJD_WGS84 4 /* WGS84 (or anything considered equivelent) */ + +/* 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 + +typedef struct { double u, v; } projUV; +typedef struct { double r, i; } COMPLEX; +typedef struct { double u, v, w; } projUVW; + +#ifndef PJ_LIB__ +#define XY projUV +#define LP projUV +#define XYZ projUVW +#define LPZ projUVW +#else +typedef struct { double x, y; } XY; +typedef struct { double lam, phi; } LP; +typedef struct { double x, y, z; } XYZ; +typedef struct { double lam, phi, z; } LPZ; +#endif + +typedef union { double f; int i; char *s; } PROJVALUE; +struct PJconsts; + +struct PJ_LIST { + char *id; /* projection keyword */ + struct PJconsts *(*proj)(struct PJconsts*); /* projection entry point */ + char * const *descr; /* description text */ +}; + +/* Merging this into the PJ_LIST infrastructure is tempting, but may imply ABI breakage. Perhaps at next major version? */ +struct PJ_SELFTEST_LIST { + char *id; /* projection keyword */ + int (* testfunc)(void); /* projection entry point */ +}; + +struct PJ_ELLPS { + char *id; /* ellipse keyword name */ + char *major; /* a= value */ + char *ell; /* elliptical parameter */ + char *name; /* comments */ +}; +struct PJ_UNITS { + char *id; /* units keyword */ + char *to_meter; /* multiply by value to get meters */ + char *name; /* comments */ +}; + +struct PJ_DATUMS { + char *id; /* datum keyword */ + char *defn; /* ie. "to_wgs84=..." */ + char *ellipse_id;/* ie from ellipse table */ + char *comments; /* EPSG code, etc */ +}; + +struct PJ_PRIME_MERIDIANS { + char *id; /* prime meridian keyword */ + 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 */ +}; + +struct FACTORS { + struct DERIVS der; + double h, k; /* meridinal, parallel scales */ + double omega, thetap; /* angular distortion, theta prime */ + double conv; /* convergence */ + double s; /* areal scale factor */ + double a, b; /* max-min scale error */ + int code; /* info as to analytics, see following */ +}; + +#define IS_ANAL_XL_YL 01 /* derivatives of lon analytic */ +#define IS_ANAL_XP_YP 02 /* derivatives of lat analytic */ +#define IS_ANAL_HK 04 /* h and k analytic */ +#define IS_ANAL_CONV 010 /* convergence analytic */ + +/* parameter list struct */ +typedef struct ARG_list { + struct ARG_list *next; + char used; + char param[1]; } paralist; + +/* base projection data structure */ +#ifdef PJ_LIB__ + /* we need this forward declaration in order to be able to add a + pointer to struct opaque to the typedef struct PJconsts below */ + struct pj_opaque; +#endif + +typedef struct PJconsts { + projCtx_t *ctx; + XY (*fwd)(LP, struct PJconsts *); + LP (*inv)(XY, struct PJconsts *); + XYZ (*fwd3d)(LPZ, struct PJconsts *); + LPZ (*inv3d)(XYZ, struct PJconsts *); + void (*spc)(LP, struct PJconsts *, struct FACTORS *); + void (*pfree)(struct PJconsts *); + + const char *descr; + paralist *params; /* parameter list */ + int over; /* over-range flag */ + int geoc; /* geocentric latitude flag */ + int is_latlong; /* proj=latlong ... not really a projection at all */ + int is_geocent; /* proj=geocent ... not really a projection at all */ + double a; /* major axis or radius if es==0 */ + double a_orig; /* major axis before any +proj related adjustment */ + double es; /* e ^ 2 */ + double es_orig; /* es before any +proj related adjustment */ + double e; /* eccentricity */ + double ra; /* 1/A */ + double one_es; /* 1 - e^2 */ + double rone_es; /* 1/one_es */ + double lam0, phi0; /* central longitude, latitude */ + double x0, y0; /* easting and northing */ + double k0; /* general scaling factor */ + double to_meter, fr_meter; /* cartesian scaling */ + + 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 PJ_LIB__ + struct pj_opaque *opaque; +#endif + +#ifdef PROJ_PARMS__ +PROJ_PARMS__ +#endif /* end of optional extensions */ +} PJ; + +/* public API */ +#include "proj_api.h" + + +/* Generate pj_list external or make list from include file */ + +#ifndef USE_PJ_LIST_H +extern struct PJ_LIST pj_list[]; +extern struct PJ_SELFTEST_LIST pj_selftest_list[]; +#endif + + + +#ifndef PJ_ELLPS__ +extern struct PJ_ELLPS pj_ellps[]; +#endif + +#ifndef PJ_UNITS__ +extern struct PJ_UNITS pj_units[]; +#endif + +#ifndef PJ_DATUMS__ +extern struct PJ_DATUMS pj_datums[]; +extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; +#endif + +#ifdef PJ_LIB__ +/* repetitive projection code */ +#define PROJ_HEAD(id, name) static const char des_##id [] = name +#define ENTRYA(name) \ + 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->fwd3d = 0; P->inv3d = 0; \ + P->spc = 0; P->descr = des_##name; +#define ENTRYX } return P; } else { +#define ENTRY0(name) ENTRYA(name) ENTRYX +#define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX +#define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX +#define ENDENTRY(p) } return (p); } +#define E_ERROR(err) { pj_ctx_set_errno( P->ctx, err); freeup(P); return(0); } +#define E_ERROR_0 { freeup(P); return(0); } +#define F_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xy); } +#define F3_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xyz); } +#define I_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lp); } +#define I3_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lpz); } +#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 FORWARD3D(name) static XYZ name(LPZ lpz, PJ *P) {XYZ xyz = {0.0, 0.0, 0.0} +#define INVERSE3D(name) static LPZ name(XYZ xyz, PJ *P) {LPZ lpz = {0.0, 0.0, 0.0} +#define FREEUP static void freeup(PJ *P) { +#define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac) +#define ELLIPSOIDAL(P) ((P->es==0)? (FALSE): (TRUE)) + +/* cleaned up alternative to most of the "repetitive projection code" macros */ +#define PROJECTION(name) \ +pj_projection_specific_setup_##name (PJ *P); \ +C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \ +C_NAMESPACE PJ *pj_##name (PJ *P) { \ + if (P) \ + return pj_projection_specific_setup_##name (P); \ + P = (PJ*) pj_calloc (1, sizeof(PJ)); \ + if (0==P) \ + return 0; \ + P->pfree = freeup; \ + P->descr = des_##name; \ + return P; \ +} \ +PJ *pj_projection_specific_setup_##name (PJ *P) + +#endif + + +int pj_generic_selftest ( + char *e_args, + char *s_args, + double tolerance_xy, + double tolerance_lp, + int n_fwd, + int n_inv, + LP *fwd_in, + XY *e_fwd_expect, + XY *s_fwd_expect, + XY *inv_in, + LP *e_inv_expect, + LP *s_inv_expect +); + + + + +#define MAX_TAB_ID 80 +typedef struct { float lam, phi; } FLP; +typedef struct { int lam, phi; } ILP; + +struct CTABLE { + char id[MAX_TAB_ID]; /* ascii info */ + LP ll; /* lower left corner coordinates */ + LP del; /* size of cells */ + ILP lim; /* limits of conversion matrix */ + FLP *cvs; /* conversion matrix */ +}; + +typedef struct _pj_gi { + char *gridname; /* identifying name of grid, eg "conus" or ntv2_0.gsb */ + char *filename; /* full path to filename */ + + const char *format; /* format of this grid, ie "ctable", "ntv1", + "ntv2" or "missing". */ + + int grid_offset; /* offset in file, for delayed loading */ + int must_swap; /* only for NTv2 */ + + struct CTABLE *ct; + + struct _pj_gi *next; + 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(projCtx,double), aasin(projCtx,double), asqrt(double), aatan2(double, double); +PROJVALUE pj_param(projCtx ctx, paralist *, const char *); +paralist *pj_mkparam(char *); +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 *); +void pj_prepare (PJ *P, const char *description, void (*freeup)(struct PJconsts *), size_t sizeof_struct_opaque); + +paralist *pj_clone_paralist( const paralist* ); +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(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(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 *); + +int pj_deriv(LP, double, PJ *, struct DERIVS *); +int pj_factors(LP, PJ *, double, struct FACTORS *); + +struct PW_COEF { /* row coefficient structure */ + int m; /* number of c coefficients (=0 for none) */ + double *c; /* power coefficients */ +}; + +/* Approximation structures and procedures */ +typedef struct { /* Chebyshev or Power series structure */ + projUV a, b; /* power series range for evaluation */ + /* or Chebyshev argument shift/scaling */ + struct PW_COEF *cu, *cv; + int mu, mv; /* maximum cu and cv index (+1 for count) */ + int power; /* != 0 if power series, else Chebyshev */ +} Tseries; +Tseries *mk_cheby(projUV, projUV, double, projUV *, projUV (*)(projUV), int, int, int); +projUV bpseval(projUV, Tseries *); +projUV bcheval(projUV, Tseries *); +projUV biveval(projUV, Tseries *); +void *vector1(int, int); +void **vector2(int, int, int); +void freev2(void **v, int nrows); +int bchgen(projUV, projUV, int, int, projUV **, projUV(*)(projUV)); +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(projCtx ctx, char *); +struct CTABLE *nad_ctable_init( projCtx ctx, PAFile fid ); +int nad_ctable_load( projCtx ctx, struct CTABLE *, PAFile fid ); +struct CTABLE *nad_ctable2_init( projCtx ctx, PAFile fid ); +int nad_ctable2_load( projCtx ctx, struct CTABLE *, PAFile fid ); +void nad_free(struct CTABLE *); + +/* higher level handling of datum grid shift files */ + +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( 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(projCtx ctx, double, const void *); +void *pj_gauss_ini(double, double, double *,double *); +LP pj_gauss(projCtx, LP, const void *); +LP pj_inv_gauss(projCtx, LP, const void *); + +extern char const pj_release[]; + +struct PJ_ELLPS *pj_get_ellps_ref( void ); +struct PJ_DATUMS *pj_get_datums_ref( void ); +struct PJ_UNITS *pj_get_units_ref( void ); +struct PJ_LIST *pj_get_list_ref( void ); +struct PJ_SELFTEST_LIST *pj_get_selftest_list_ref ( void ); +struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref( void ); + +double pj_atof( const char* nptr ); +double pj_strtod( const char *nptr, char **endptr ); + +#ifdef __cplusplus +} +#endif + +#endif /* end of basic projections header */ diff --git a/proj4/src/rtodms.c b/proj4/src/rtodms.c new file mode 100644 index 000000000000..fa5c3cd10424 --- /dev/null +++ b/proj4/src/rtodms.c @@ -0,0 +1,74 @@ +/* Convert radian argument to DMS ascii format */ +#include +#include +#include +/* +** RES is fractional second figures +** RES60 = 60 * RES +** CONV = 180 * 3600 * RES / PI (radians to RES seconds) +*/ + static double +RES = 1000., +RES60 = 60000., +CONV = 206264806.24709635516; + static char +format[50] = "%dd%d'%.3f\"%c"; + static int +dolong = 0; + void +set_rtodms(int fract, int con_w) { + int i; + + if (fract >= 0 && fract < 9 ) { + RES = 1.; + /* following not very elegant, but used infrequently */ + for (i = 0; i < fract; ++i) + RES *= 10.; + RES60 = RES * 60.; + CONV = 180. * 3600. * RES / M_PI; + if (! con_w) + (void)sprintf(format,"%%dd%%d'%%.%df\"%%c", fract); + else + (void)sprintf(format,"%%dd%%02d'%%0%d.%df\"%%c", + fract+2+(fract?1:0), fract); + dolong = con_w; + } +} + char * +rtodms(char *s, double r, int pos, int neg) { + int deg, min, sign; + char *ss = s; + double sec; + + if (r < 0) { + r = -r; + if (!pos) { *ss++ = '-'; sign = 0; } + else sign = neg; + } else + sign = pos; + r = floor(r * CONV + .5); + sec = fmod(r / RES, 60.); + r = floor(r / RES60); + min = fmod(r, 60.); + r = floor(r / 60.); + deg = r; + + if (dolong) + (void)sprintf(ss,format,deg,min,sec,sign); + else if (sec) { + char *p, *q; + /* double prime + pos/neg suffix (if included) + NUL */ + size_t suffix_len = sign ? 3 : 2; + + (void)sprintf(ss,format,deg,min,sec,sign); + for (q = p = ss + strlen(ss) - suffix_len; *p == '0'; --p) ; + if (*p != '.') + ++p; + if (++q != p) + (void)memmove(p, q, suffix_len); + } else if (min) + (void)sprintf(ss,"%dd%d'%c",deg,min,sign); + else + (void)sprintf(ss,"%dd%c",deg, sign); + return s; +} diff --git a/proj4/src/runmultistresstest.sh b/proj4/src/runmultistresstest.sh new file mode 100755 index 000000000000..ad5968f6e3a6 --- /dev/null +++ b/proj4/src/runmultistresstest.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +gcc -g multistresstest.c .libs/libproj.so -lpthread -o multistresstest +./multistresstest diff --git a/proj4/src/test228.c b/proj4/src/test228.c new file mode 100644 index 000000000000..a8e55c4ca5be --- /dev/null +++ b/proj4/src/test228.c @@ -0,0 +1,78 @@ +#include +#include /* for printf declaration */ + + +#ifdef _WIN32 + +int main(int argc, char* argv[]) +{ + printf("Test not yet ported on Win32\n"); + return 0; +} + +#else + +#include +#include +#include +#include + +volatile int run = 0; +volatile int started = 0; + +void* thread_main(void* unused) +{ + projCtx p_proj_ctxt; + projPJ p_WGS84_proj; + projPJ p_OSGB36_proj; + + __sync_add_and_fetch(&started, 1); + while(run == 0); + + p_proj_ctxt=pj_ctx_alloc(); + p_WGS84_proj=pj_init_plus_ctx(p_proj_ctxt,"+proj=longlat " + "+ellps=WGS84 +datum=WGS84 +no_defs"); + p_OSGB36_proj=pj_init_plus_ctx(p_proj_ctxt, + "+proj=longlat +ellps=airy +datum=OSGB36 +nadgrids=OSTN02_NTv2.gsb " + "+no_defs"); + + while(run) + { + double x, y; + int proj_ret; + + x = -5.2*DEG_TO_RAD; + y = 50*DEG_TO_RAD; + proj_ret = pj_transform(p_WGS84_proj, + p_OSGB36_proj, 1, 1, &x, &y, NULL ); + x *= RAD_TO_DEG; + y *= RAD_TO_DEG; + /*printf("%.18f %.18f\n", x, y); */ + assert(proj_ret == 0); + assert(fabs(x - -5.198965360936369962) < 1e-15); + assert(fabs(y - 49.999396034285531698) < 1e-15); + } + + return NULL; +} + +int main(int argc, char* argv[]) +{ + int i; + pthread_t tid1, tid2; + pthread_attr_t attr1, attr2; + + pthread_attr_init(&attr1); + pthread_attr_init(&attr2); + + pthread_create(&tid1, &attr1, thread_main, NULL); + pthread_create(&tid2, &attr2, thread_main, NULL); + while(started != 2); + run = 1; + for(i=0;i<2;i++) + sleep(1); + run = 0; + return 0; +} + +#endif /* _WIN32 */ diff --git a/proj4/src/vector1.c b/proj4/src/vector1.c new file mode 100644 index 000000000000..b3023ee59e4e --- /dev/null +++ b/proj4/src/vector1.c @@ -0,0 +1,29 @@ +/* make storage for one and two dimensional matricies */ +#include +#include + void * /* one dimension array */ +vector1(int nvals, int size) { return((void *)pj_malloc(size * nvals)); } + void /* free 2D array */ +freev2(void **v, int nrows) { + if (v) { + for (v += nrows; nrows > 0; --nrows) + pj_dalloc(*--v); + pj_dalloc(v); + } +} + void ** /* two dimension array */ +vector2(int nrows, int ncols, int size) { + void **s; + + if ((s = (void **)pj_malloc(sizeof(void *) * nrows)) != NULL) { + int rsize, i; + + rsize = size * ncols; + for (i = 0; i < nrows; ++i) + if (!(s[i] = pj_malloc(rsize))) { + freev2(s, i); + return (void **)0; + } + } + return s; +} diff --git a/proj4/test/gigs/5101.1-jhs.json b/proj4/test/gigs/5101.1-jhs.json new file mode 100644 index 000000000000..95624c6291fc --- /dev/null +++ b/proj4/test/gigs/5101.1-jhs.json @@ -0,0 +1,63 @@ +{ +"coordinates": [ + [[3, 80], [496813.178, 3358297.326]], + [[2.9999999, 60], [678711.584, 1134498.83]], + [[3, 49], [765648.501, -87944.74]], + [[3.0000001, 40], [826893.845, -1087710.121]], + [[3, 20], [923539.353, -3308151.625]], + [[3, 0], [957087.829, -5527462.686]], + [[3, -20], [923539.353, -7746773.748]], + [[3, -40], [826893.845, -9967215.251]], + [[3, -60], [678711.584, -12189424.202]], + [[3, -80], [496813.178, -14413222.698]], + [[-2, 80], [400000, 3354134.429]], + [[-2, 60], [400000, 1123956.966]], + [[-2, 49], [400000, -100000]], + [[-2, 40], [400000, -1099699.834]], + [[-2, 20], [400000, -3315978.565]], + [[-2, 0], [400000, -5527462.686]], + [[-2, -20], [400000, -7738946.807]], + [[-2, -40], [400000, -9955225.538]], + [[-2, -60], [400000, -12178882.338]], + [[-2, -80], [400000, -14409059.801]], + [[-5, 80], [341867.711, 3355633.571]], + [[-5, 60], [232704.966, 1127751.264]], + [[-5, 49], [180586.02, -95662.911]], + [[-5, 40], [143900.026, -1095387.991]], + [[-5, 20], [86073.28, -3313165.843]], + [[-5, 0], [66021.018, -5527462.686]], + [[-5, -20], [86073.28, -7741759.529]], + [[-5, -40], [143900.026, -9959537.381]], + [[-5, -60], [232704.966, -12182676.637]], + [[-5, -80], [341867.711, -14410558.943]], + [[-7.5559037, 49.7661327], [0, 0]], + [[-5, 0], [66021.018, -5527462.686]], + [[-4, 0], [177404.277, -5527462.686]], + [[-3, 0], [288719.208, -5527462.686]], + [[-2, 0], [400000.0, -5527462.686]], + [[-1, 0], [511280.792, -5527462.686]], + [[0, 0], [622595.723, -5527462.686]], + [[1, 0], [733978.982, -5527462.686]], + [[2, 0], [845464.865, -5527462.686]], + [[3, 0], [957087.829, -5527462.686]], + [[4, 0], [1068882.539, -5527462.686]], + [[5, 0], [1180883.933, -5527462.686]], + [[6, 0], [1293127.266, -5527462.686]], + [[7, 0], [1405648.179, -5527462.686]], + [[8, 0], [1518482.747, -5527462.686]], + [[-5, 60], [232704.966, 1127751.264]], + [[-4, 60], [288455.816, 1125643.213]], + [[-3, 60], [344223.662, 1124378.512]], + [[-2, 60], [400000, 1123956.966]], + [[-1, 60], [455776.338, 1124378.512]], + [[0, 60], [511544.184, 1125643.213]], + [[1, 60], [567295.034, 1127751.264]], + [[2, 60], [623020.357, 1130702.987]], + [[3, 60], [678711.584, 1134498.83]], [[4.0, 60.0], [734360.093, 1139139.367]], [[5.0, 60.0], [789957.197, 1144625.296]], [[6.0, 60.0], [845494.132, 1150957.434]], [[7.0, 60.0], [900962.042, 1158136.713]], [[8.0, 60.0], + [956351.967, 1166164.18]] +], +"description": "Test 5101 (part 1), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula", +"projections": ["+init=epsg:4326", "+proj=etmerc +lat_0=49 +lon_0=-2 +k_0=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=WGS84 +units=m +no_def"], +"tests": [{"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5101.2-jhs.json b/proj4/test/gigs/5101.2-jhs.json new file mode 100644 index 000000000000..c03929aba8f0 --- /dev/null +++ b/proj4/test/gigs/5101.2-jhs.json @@ -0,0 +1,32 @@ +{ +"coordinates": [ + [[-2.0, 80.0], [403186.945, 8885748.708]], + [[-2.0, 60.0], [221288.77, 6661953.041]], + [[-2.0, 40.0], [73106.698, 4439746.917]], + [[-2.0, 20.0], [-23538.687, 2219308.238]], + [[-2.0, 0.0], [-57087.12, 0.0]], + [[-2.0, -20.0], [-23538.687, -2219308.238]], + [[-2.0, -40.0], [73106.698, -4439746.917]], + [[-2.0, -60.0], [221288.77, -6661953.041]], + [[-2.0, -80.0], [403186.945, -8885748.708]], + [[-5.0, 60.0], [54506.435, 6678411.623]], + [[-4.0, 60.0], [110043.299, 6672079.494]], + [[-3.0, 60.0], [165640.332, 6666593.572]], + [[-2.0, 60.0], [221288.77, 6661953.041]], + [[-1.0, 60.0], [276979.926, 6658157.202]], + [[0.0, 60.0], [332705.179, 6655205.484]], + [[1.0, 60.0], [388455.958, 6653097.435]], + [[2.0, 60.0], [444223.733, 6651832.735]], + [[3.0, 60.0], [500000.0, 6651411.19]], + [[4.0, 60.0], [555776.267, 6651832.735]], + [[5.0, 60.0], [611544.042, 6653097.435]], + [[6.0, 60.0], [667294.821, 6655205.484]], + [[7.0, 60.0], [723020.074, 6658157.202]], + [[8.0, 60.0], [778711.23, 6661953.041]] + ], +"description": "Test 5101 (part 2), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula", +"projections": ["+init=epsg:4326", "+init=epsg:32631"], +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5101.3-jhs.json b/proj4/test/gigs/5101.3-jhs.json new file mode 100644 index 000000000000..e7cc2dc3ba9e --- /dev/null +++ b/proj4/test/gigs/5101.3-jhs.json @@ -0,0 +1,33 @@ +{ +"coordinates": [ + [[146, 80], [596813.055, 18885748.71]], + [[146, 60], [778711.23, 16661953.04]], + [[146, 40], [926893.302, 14439746.92]], + [[146, 20], [1023538.687, 12219308.24]], + [[146, 0], [1057087.12, 10000000.0]], + [[146, -20], [1023538.687, 7780691.762]], + [[146, -40], [926893.302, 5560253.083]], + [[146, -60], [778711.23, 3338046.96]], + [[146, -80], [596813.055, 1114251.292]], + [[136, -60], [221288.77, 3338046.96]], + [[137, -60], [276979.926, 3341842.798]], + [[138, -60], [332705.179, 3344794.516]], + [[139, -60], [388455.958, 3346902.565]], + [[140, -60], [444223.733, 3348167.265]], + [[141, -60], [500000.0, 3348588.81]], + [[142, -60], [555776.267, 3348167.265]], + [[143, -60], [611544.042, 3346902.565]], + [[144, -60], [667294.821, 3344794.516]], + [[145, -60], [723020.074, 3341842.798]], + [[146, -60], [778711.23, 3338046.96]], + [[147, -60], [834359.668, 3333406.428]], + [[148, -60], [889956.701, 3327920.506]], + [[149, -60], [945493.565, 3321588.377]] + ], +"description": "Test 5101 (part 3), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula", +"projections": ["+init=epsg:4283", "+init=epsg:28354"], +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5101.4-jhs-etmerc.json b/proj4/test/gigs/5101.4-jhs-etmerc.json new file mode 100644 index 000000000000..1775f750f239 --- /dev/null +++ b/proj4/test/gigs/5101.4-jhs-etmerc.json @@ -0,0 +1,31 @@ +{ +"coordinates": [ + [[-63.9993433, 80.0002644], [5422500.0, 18889800.0]], + [[-63.9998472, 60.0001191], [5276900.0, 16662800.0]], + [[-63.9997361, 40.0003081], [5158399.999, 14439199.99]], + [[-64.0004605, 19.9996448], [5081100.0, 12219300.0]], + [[-63.9996186, 0.0003092], [5054400.005, 10002000.0]], + [[-64.0004675, -19.9999283], [5081100.017, 7784599.993]], + [[-63.9997001, -39.9996924], [5158400.0, 5564800.0]], + [[-63.9998814, -60.0004008], [5276899.994, 3341099.995]], + [[-63.9991006, -79.9996521], [5422500.0, 1114200.0]], + [[-70.0002089, -40.000215], [4645300.113, 5524200.123]], + [[-69.0001441, -40.0002935], [4730900.0, 5533400.0]], + [[-67.9995333, -39.9996136], [4816500.043, 5541700.028]], + [[-66.9998073, -39.9999313], [4902000.0, 5548900.0]], + [[-65.9996522, -39.9995894], [4987500.009, 5555200.001]], + [[-64.9992796, -40.000411], [5073000.0, 5560400.0]], + [[-63.9997, -39.9996925], [5158400.01, 5564799.987]], + [[-62.9999842, -40.0002087], [5243800.0, 5568100.0]], + [[-62.0000778, -40.0001803], [5329199.995, 5570500.009]], + [[-61.0000574, -39.9996182], [5414600.0, 5572000.0]], + [[-60.0, -40.0003306], [5500000.0, 5572399.996]], + [[-58.9999426, -39.9996182], [5585400.0, 5572000.0]], + [[-57.9999222, -40.0001803], [5670800.005, 5570500.009]], + [[-57.0000158, -40.0002087], [5756200.0, 5568100.0]] + ], +"description": "Test 5101 (part 4), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula", +"projections": ["+init=epsg:4190", + "+proj=etmerc +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"], +"tests": [{"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5101.4-jhs.json b/proj4/test/gigs/5101.4-jhs.json new file mode 100644 index 000000000000..816487359a3e --- /dev/null +++ b/proj4/test/gigs/5101.4-jhs.json @@ -0,0 +1,33 @@ +{ +"coordinates": [ + [[-63.9993433, 80.0002644], [5422500.0, 18889800.0]], + [[-63.9998472, 60.0001191], [5276900.0, 16662800.0]], + [[-63.9997361, 40.0003081], [5158399.999, 14439199.99]], + [[-64.0004605, 19.9996448], [5081100.0, 12219300.0]], + [[-63.9996186, 0.0003092], [5054400.005, 10002000.0]], + [[-64.0004675, -19.9999283], [5081100.017, 7784599.993]], + [[-63.9997001, -39.9996924], [5158400.0, 5564800.0]], + [[-63.9998814, -60.0004008], [5276899.994, 3341099.995]], + [[-63.9991006, -79.9996521], [5422500.0, 1114200.0]], + [[-70.0002089, -40.000215], [4645300.113, 5524200.123]], + [[-69.0001441, -40.0002935], [4730900.0, 5533400.0]], + [[-67.9995333, -39.9996136], [4816500.043, 5541700.028]], + [[-66.9998073, -39.9999313], [4902000.0, 5548900.0]], + [[-65.9996522, -39.9995894], [4987500.009, 5555200.001]], + [[-64.9992796, -40.000411], [5073000.0, 5560400.0]], + [[-63.9997, -39.9996925], [5158400.01, 5564799.987]], + [[-62.9999842, -40.0002087], [5243800.0, 5568100.0]], + [[-62.0000778, -40.0001803], [5329199.995, 5570500.009]], + [[-61.0000574, -39.9996182], [5414600.0, 5572000.0]], + [[-60, -40.0003306], [5500000.0, 5572399.996]], + [[-58.9999426, -39.9996182], [5585400.0, 5572000.0]], + [[-57.9999222, -40.0001803], [5670800.005, 5570500.009]], + [[-57.0000158, -40.0002087], [5756200.0, 5568100.0]] + ], +"description": "Test 5101 (part 4), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula", +"projections": ["+init=epsg:4190", "+init=epsg:22175"], +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5102.1.json b/proj4/test/gigs/5102.1.json new file mode 100644 index 000000000000..28f745386608 --- /dev/null +++ b/proj4/test/gigs/5102.1.json @@ -0,0 +1,29 @@ +{ +"coordinates": [ + [[5, 58], [760722.92, 3457368.68]], + [[5, 57], [764566.844, 3343948.93]], + [[5, 56], [768396.683, 3230944.812]], + [[5, 55], [772213.973, 3118310.947]], + [[5, 54], [776020.189, 3006003.839]], + [[5, 53], [779816.748, 2893981.68]], + [[4, 51], [717027.292, 2668695.784]], + [[4, 50], [719385.249, 2557252.841]], + [[4, 49], [721740.43, 2445941.161]], + [[4, 46.8], [726915.752, 2201342.519]], + [[3, 53], [644764.905, 2891124.195]], + [[4, 53], [712299.916, 2892123.369]], + [[5, 53], [779816.748, 2893981.68]], + [[6, 53], [847304.473, 2896698.827]], + [[7, 53], [914752.168, 2900274.371]], + [[8, 53], [982148.913, 2904707.734]], + [[9, 53], [1049483.8, 2909998.196]], + [[10, 53], [1116745.929, 2916144.902]], + [[11, 53], [1183924.412, 2923146.858]] + ], +"description": "Test 5102, Lambert Conic Conformal (1SP), v2-0_2011-06-28.", +"projections": ["+init=epsg:4230", "+init=epsg:2192"], +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5102.2.json b/proj4/test/gigs/5102.2.json new file mode 100644 index 000000000000..3916733a7475 --- /dev/null +++ b/proj4/test/gigs/5102.2.json @@ -0,0 +1,29 @@ +{ +"coordinates": [ + [[2.9586342556, 64.4444444444], [760724.023, 3457334.864]], + [[2.9586342556, 63.3333333333], [764567.882, 3343917.044]], + [[2.9586342556, 62.2222222222], [768397.648, 3230915.06]], + [[2.9586342556, 61.1111111111], [772214.859, 3118283.535]], + [[2.9586342556, 60], [776020.989, 3005978.979]], + [[2.9586342556, 58.8888888889], [779817.454, 2893959.584]], + [[1.8475231444, 56.6666666667], [717027.602, 2668679.866]], + [[1.8475231444, 55.5555555556], [719385.487, 2557240.347]], + [[1.8475231444, 54.4444444444], [721740.59, 2445932.319]], + [[1.8475231444, 52], [726915.726, 2201342.51838845]], + [[0.7364120333, 58.8888888889], [644765.081, 2891102.088]], + [[1.8475231444, 58.8888888889], [712300.356, 2892101.266]], + [[2.9586342556, 58.8888888889], [779817.454, 2893959.584]], + [[4.0697453667, 58.8888888889], [847305.444, 2896676.742]], + [[5.1808564778, 58.8888888889], [914753.403, 2900252.301]], + [[6.2919675889, 58.8888888889], [982150.413, 2904685.68]], + [[7.4030787, 58.8888888889], [1049485.565, 2909976.163]], + [[8.5141898111, 58.8888888889], [1116747.958, 2916122.894]], + [[9.6253009222, 58.8888888889], [1183926.705, 2923124.876]] + ], +"description": "Test 5102 (part 2), Lambert Conic Conformal (1SP), v2-0_2011-06-28.", +"projections": ["+init=epsg:4807", "+init=epsg:27572"], +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5103.1.json b/proj4/test/gigs/5103.1.json new file mode 100644 index 000000000000..e2fdf9a10e8f --- /dev/null +++ b/proj4/test/gigs/5103.1.json @@ -0,0 +1,29 @@ +{ +"coordinates": [ + [[5, 58], [187742.7, 969521.653]], + [[5, 57], [188698.877, 857277.135]], + [[5, 56], [189652.853, 745291.184]], + [[5, 55], [190604.967, 633523.672]], + [[5, 54], [191555.55, 521935.9]], + [[5, 53], [192504.921, 410490.433]], + [[5.3876389, 52.1561606], [219843.841, 316827.604]], + [[4, 51], [124202.936, 187756.876]], + [[4, 50], [123652.406, 76521.628]], + [[4, 49], [123101.889, -34711.068]], + [[3.3137281, 47.9752611], [71254.553, -148236.592]], + [[3, 53], [58108.966, 411155.591]], + [[4, 53], [125304.704, 410370.504]], + [[5, 53], [192504.921, 410490.433]], + [[6, 53], [259697.429, 411515.356]], + [[7, 53], [326870.04, 413445.087]], + [[8, 53], [394010.571, 416279.276]], + [[9, 53], [461106.844, 420017.408]], + [[10, 53], [528146.69, 424658.807]], + [[11, 53], [595117.95, 430202.63]] +], + +"description": "Test 5103 (part 1), Lambert Conic Conformal (2SP), v2-0_2011-06-28.", +"projections": ["+init=epsg:4313", "+init=epsg:31370"], +"tests": [ {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5103.2.json b/proj4/test/gigs/5103.2.json new file mode 100644 index 000000000000..c882393c0c50 --- /dev/null +++ b/proj4/test/gigs/5103.2.json @@ -0,0 +1,21 @@ +{ +"coordinates": [ + [[-110, 49], [2003937.27, 6452491.7]], + [[-110, 47], [2016621.93, 5717728.61]], + [[-110, 45], [2029255.57, 4985920.56]], + [[-110, 43], [2041855.08, 4256089.74]], + [[-110, 41], [2054436.57, 3527302.73]], + [[-110, 41], [2054436.57, 3527302.73]], + [[-108, 41], [2606245.52, 3543182.55]], + [[-106, 41], [3157542.86, 3571757.39]], + [[-104, 41], [3708036.57, 3613012.12]], + [[-102, 41], [4257435.06, 3666924.89]] + ], +"description": "Test 5103 (part 2), Lambert Conic Conformal (2SP), v2-0_2011-06-28.", +"projections": ["+init=epsg:4152", "+init=epsg:2921"], + +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5103.3.json b/proj4/test/gigs/5103.3.json new file mode 100644 index 000000000000..9a388af200c6 --- /dev/null +++ b/proj4/test/gigs/5103.3.json @@ -0,0 +1,20 @@ +{ +"coordinates": [ + [[-110, 49], [2003933.27, 6452478.8]], + [[-110, 47], [2016617.9, 5717717.18]], + [[-110, 45], [2029251.51, 4985910.59]], + [[-110, 43], [2041851.0, 4256081.23]], + [[-110, 41], [2054432.46, 3527295.67]], + [[-110, 41], [2054432.46, 3527295.67]], + [[-108, 41], [2606240.3, 3543175.46]], + [[-106, 41], [3157536.54, 3571750.25]], + [[-104, 41], [3708029.16, 3613004.9]], + [[-102, 41], [4257426.54, 3666917.56]] + ], +"description": "Test 5103 (part 3), Lambert Conic Conformal (2SP), v2-0_2011-06-28.", +"projections": ["+init=epsg:4152", "+init=epsg:3568"], +"tests": [ + {"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5104.json b/proj4/test/gigs/5104.json new file mode 100644 index 000000000000..973f832f9085 --- /dev/null +++ b/proj4/test/gigs/5104.json @@ -0,0 +1,30 @@ +{ +"coordinates": [ + [[5, 58], [132023.27, 1114054.87]], + [[5, 57], [131405.466, 1002468.081]], + [[5, 56], [130792.264, 890981.281]], + [[5, 55], [130183.56, 779577.7]], + [[5, 54], [129579.26, 668240.58]], + [[5, 53], [128979.26, 556953.19]], + [[5.38763888888889, 52.1561605555556], [155000, 463000]], + [[4, 51], [57605.946, 335312.662]], + [[4, 50], [55502.306, 224086.514]], + [[4.0, 49.0], [53412.76, 112842.73]], + [[3.31372805555556, 47.9752611111111], [0, 0]], + [[3, 53], [-5253.06, 559535.55]], + [[4, 53], [61856.78, 557779.12]], + [[5, 53], [128979.26, 556953.19]], + [[6, 53], [196105.28, 557057.74]], + [[7, 53], [263225.72, 558092.77]], + [[8, 53], [330331.46, 560058.31]], + [[9, 53], [397413.385, 562954.436]], + [[10, 53], [464462.35, 566781.24]], + [[11, 53], [531469.2, 571538.84]] +], +"description": "Test 5104, Oblique stereographic, v2-0_2011-06-28.", +"projections": ["+init=epsg:4289", "+init=epsg:28992"], +"tests": [ + {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5105.1.json b/proj4/test/gigs/5105.1.json new file mode 100644 index 000000000000..48b5a2fe8d8c --- /dev/null +++ b/proj4/test/gigs/5105.1.json @@ -0,0 +1,26 @@ +{ +"coordinates": [ + [[117, 12], [807919.14, 1329535.33]], + [[117, 10], [808784.98, 1107678.47]], + [[117, 9], [809334.18, 996918.21]], + [[117, 8], [809939.3, 886240.18]], + [[116.8465522, 6.8784583], [793704.63, 762081.05]], + [[117, 6], [811253.3, 665041.27]], + [[117, 5], [811930.35, 554475.63]], + [[117, 4], [812599.58, 443902.71]], + [[115, 4], [590521.15, 442890.86]], + [[117, 3], [813245.13, 333300.13]], + [[117, 2], [813851.07, 222645.51]], + [[117.0, 1.0], [814401.38, 111916.45]], + [[109.6858208, -0.0001733], [0, 0]], + [[123, 6], [1475669.28, 673118.57]], + [[122, 6], [1364854.86, 671146.25]], + [[121, 6], [1254086.17, 669446.25]], [[120.0, 6.0], [1143352.6, 668002.07]], [[119.0, 6.0], [1032643.31, 666797.35]], [[118.0, 6.0], [921947.29, 665815.82]], [[117.0, 6.0], [811253.3, 665041.27]], [[116.0, 6.0], [700549.97, 664457.59]], [[115.0, 6.0], [589825.71, 664048.72]], + [[114, 6], [479068.802, 663798.63]] +], +"description": "Test 5105 (part 1), Oblique Mercator (variant B), v2-0_2011-06-28.", +"projections": ["+init=epsg:4742", + "+proj=somerc +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"], +"tests": [{"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5105.2.json b/proj4/test/gigs/5105.2.json new file mode 100644 index 000000000000..d811108d3c26 --- /dev/null +++ b/proj4/test/gigs/5105.2.json @@ -0,0 +1,23 @@ +{ +"coordinates": [ + [[16, 48.5], [424714.235, 355124.6]], + [[17.2, 48.0], [512056.188, 296756.716]], + [[17.582650555556, 47.636134722222], [539847.765, 255701.086]], + [[19.048571666667, 47.144393611111], [650000, 200000]], + [[19.223429444445, 46.875668333333], [663329.053, 170142.318]], + [[20.135740555556, 46.370301111111], [733651.455, 114532.099]], + [[21.4, 45.7], [833148.855, 42191.482]], + [[22.3, 49.3], [886565.935, 444656.613]], + [[21.294198611111, 48.489974722222], [815999.993, 351999.998]], + [[19.223429444445, 46.875668333333], [663329.053, 170142.318]], + [[17.619153611111, 46.068746388889], [539403.958, 81440.103]], + [[16.36, 45.5], [439836.709, 20816.456]] +], + +"description": "Test 5105 (part 2), Oblique Mercator (variant B), v2-0_2011-06-28.", +"projections": ["+init=epsg:4237", "+init=epsg:23700"], +"tests": [ + {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5106.json b/proj4/test/gigs/5106.json new file mode 100644 index 000000000000..cc74147841f1 --- /dev/null +++ b/proj4/test/gigs/5106.json @@ -0,0 +1,35 @@ +{ +"coordinates": [ + [[117, 12], [807919.144, 1329535.334]], + [[117, 10], [808784.981, 1107678.473]], + [[117, 9], [809334.177, 996918.212]], + [[117, 8], [809939.302, 886240.183]], + [[116.8465522222222222224906494, 6.878458333333333334122825262], [793704.631, 762081.047]], + [[117, 6], [811253.303, 665041.265]], + [[117, 5], [811930.345, 554475.627]], + [[117, 4], [812599.582, 443902.706]], + [[115, 4], [590521.147, 442890.861]], + [[117, 3], [813245.133, 333300.13]], + [[117, 2], [813851.067, 222645.511]], + [[117, 1], [814401.375, 111916.452]], + [[109.6858208333333333333530706, -0.0001733333333333333330866171056], [0, 0]], + [[123, 6], [1475669.281, 673118.573]], + [[122, 6], [1364854.862, 671146.254]], + [[121, 6], [1254086.173, 669446.249]], + [[120, 6], [1143352.598, 668002.074]], + [[119, 6], [1032643.312, 666797.354]], + [[118, 6], [921947.286, 665815.815]], + [[117, 6], [811253.303, 665041.265]], + [[116, 6], [700549.965, 664457.586]], + [[115, 6], [589825.706, 664048.715]], + [[114, 6], [479068.802, 663798.63]] +], + +"description": "Test 5106, Hotine Oblique Mercator (variant A), v2-0_2011-06-28.", + +"projections": ["+init=epsg:4742", "+init=epsg:3376"], +"tests": [ + {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5107.json b/proj4/test/gigs/5107.json new file mode 100644 index 000000000000..584400287b6b --- /dev/null +++ b/proj4/test/gigs/5107.json @@ -0,0 +1,26 @@ +{ +"projections": [ + "+init=epsg:4674", + "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs " +], +"tests": [ + {"type": "conversion", "tolerances": [5.555555555555555e-07, 0.05]}, + {"type": "roundtrip", "times": 1000, "tolerances": [5.555555555555556e-08, 0.006]} + ], +"coordinates": [ + [[-54, 0], [5000000.0, 10000000.0]], + [[-45, 6], [5996378.70981775, 10671650.0559245]], + [[-45, 0], [6001875.41713946, 10000000.0]], + [[-45, -6], [5996378.70981775, 9328349.94407546]], + [[-41, -13], [6409689.58687533, 8526306.26193173]], + [[-38, -20], [6671808.91962898, 7707735.72987798]], + [[-37, -24], [6725584.49172815, 7240461.99578364]], + [[-36, -30], [6729619.73995286, 6543762.57643596]], + [[-57, -30], [4710574.22343996, 6676097.81116979]], + [[-54, -29.3674766667], [5000000.0, 6750000.0]], + [[-47, -27.5], [5691318.14688622, 6937461.05067494]], + [[-37, -24], [6725584.49172815, 7240461.99578364]], + [[-30, 22.5], [7458947.7013321, 7313327.31691123]] +], +"description": "Test 5107, American Polyconic, v2-0_2011-06-28." +} diff --git a/proj4/test/gigs/5108.json b/proj4/test/gigs/5108.json new file mode 100644 index 000000000000..2ff48e23e5c8 --- /dev/null +++ b/proj4/test/gigs/5108.json @@ -0,0 +1,26 @@ +{ +"coordinates": [ + [[106, 10], [267186.017, 881108.902]], + [[106, 9], [268006.024, 770398.186]], + [[106, 8], [268740.351, 659692.254]], + [[106, 7], [269388.786, 548990.588]], + [[106, 6], [269951.141, 438292.666]], + [[106, 5], [270427.255, 327597.962]], + [[106, 4], [270816.99, 216905.945]], + [[106, 3], [271120.234, 106216.081]], + [[103.561065778024, 2.04246768119792], [0, 0]], + [[103.640259839629, 1.8277648438075], [8813.252, -23740.095]], + [[106, 1], [271466.923, -115159.332]], + [[109, 5], [603116.703, 329668.599]], + [[108, 5], [492221.308, 328807.336]], + [[107, 5], [381324.74, 328117.472]], + [[106, 5], [270427.255, 327597.962]], + [[105, 5], [159529.111, 327248.012]], + [[104, 5], [48630.563, 327067.097]] +], + +"description": "Test 5108, Cassini-Soldner, v2-0_2011-06-28.", +"projections": ["+init=epsg:4742", "+init=epsg:3377"], +"tests": [{"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5109.json b/proj4/test/gigs/5109.json new file mode 100644 index 000000000000..626141644902 --- /dev/null +++ b/proj4/test/gigs/5109.json @@ -0,0 +1,23 @@ +{ +"coordinates": [ + [[132, 0], [0, 0]], + [[132, -27], [0, -2926820.89]], + [[140, 0], [966973.98, -30285.6]], + [[140, -20], [832799.36, -2170181.93]], + [[140, -40], [693250.21, -4395794.49]], + [[140, -60], [567313.29, -6404311.16]], + [[140, -80], [486878.674, -7687130.029]], + [[120, -60], [-850274.75, -6426505.13]], + [[130, -60], [-141915.26, -6387653.78]], + [[140, -60], [567313.29, -6404311.16]], + [[150, -60], [1273067.747, -6476375.276]], + [[160, -60], [1971026.26, -6603404.82]], + [[170, -60], [2656914.716, -6784621.89]] +], +"description": "Test 5109, Albers Equal Area, v2-0_2011-06-28.", +"projections": ["+init=epsg:4283", "+init=epsg:3577"], +"tests": [ + {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5110.json b/proj4/test/gigs/5110.json new file mode 100644 index 000000000000..e9812ecf3f9c --- /dev/null +++ b/proj4/test/gigs/5110.json @@ -0,0 +1,12 @@ +{ +"coordinates": [ + [[5, 70], [4127824.65822105, 5214090.649]], + [[5, 60], [4041548.13, 4109791.66]], + [[5, 50], [3962799.45, 2999718.853]], + [[5, 40], [3892127.02, 1892578.962]], + [[5, 30], [3830117.9, 796781.677]], + [[10, 52], [4321000.0, 3210000.0]], [[0.0, 50.0], [3606514.43, 3036305.967]], [[3.0, 50.0], [3819948.288, 3011432.894]], [[5.0, 50.0], [3962799.451, 2999718.853]], [[8.0, 50.0], [4177612.521, 2989464.315]], [[10.0, 50.0], [4321000.0, 2987510.567]]], "description": "Test 5110, Lambert Azimuthal Equal Area, v2-0_2011-06-28.", +"projections": ["+init=epsg:4258", "+init=epsg:3035"], +"tests": [{"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5111.1.json b/proj4/test/gigs/5111.1.json new file mode 100644 index 000000000000..25ca85725b2c --- /dev/null +++ b/proj4/test/gigs/5111.1.json @@ -0,0 +1,45 @@ +{ +"coordinates": [ + [[100.0876483, 77.6534822], [2800000.0, 15000000.0]], + [[100.0876483, 73.1442856], [2800000.0, 13000000.0]], + [[100.0876483, 67.0518325], [2800000.0, 11000000.0]], + [[100.0876483, 58.9140458], [2800000.0, 9000000.0]], + [[100.0876483, 48.2638981], [2800000.0, 7000000.0]], + [[100.0876483, 34.8029044], [2800000.0, 5000000.0]], + [[100.0876483, 18.7048581], [2800000.0, 3000000.0]], + [[100.0876483, 0.9071392], [2800000.0, 1000000.0]], + [[110.0, 0.0], [3900000.0, 900000.0]], + [[100.0876483, -0.9071392], [2800000.0, 800000.0]], + [[100.0876483, -1.8140483], [2800000.0, 700000.0]], + [[100.0876483, -2.0], [2800000.0, 679490.65]], + [[100.0876483, -3.6262553], [2800000.0, 500000.0]], + [[100.0876483, -4.531095], [2800000.0, 400000.0]], + [[100.0876483, -5.4347892], [2800000.0, 300000.0]], + [[100.0876483, -6.3371111], [2800000.0, 200000.0]], + [[100.0876483, -7.2378372], [2800000.0, 100000.0]], + [[74.8562083, -8.136745], [0.0, 0.0]], + [[-71.0, -2.0], [23764105.84, 679490.65]], + [[-90.0, -2.0], [21655625.33, 679490.65]], + [[-120.0, -2.0], [18326445.58, 679490.65]], + [[-150.0, -2.0], [14997265.83, 679490.65]], + [[180.0, -2.0], [11668086.08, 679490.65]], + [[150.0, -2.0], [8338906.33, 679490.65]], + [[120.0, -2.0], [5009726.58, 679490.65]], + [[110.0, -2.0], [3900000.0, 679490.65]], + [[106.8077194, -2.0], [3545744.14, 679490.65]], + [[100.0876483, -2.0], [2800000.0, 679490.65]], + [[90.0, -2.0], [1680546.83, 679490.65]], + [[60.0, -2.0], [-1648632.92, 679490.65]], + [[30.0, -2.0], [-4977812.67, 679490.65]], + [[0.0, -2.0], [-8306992.42, 679490.65]], + [[-30.0, -2.0], [-11636172.17, 679490.65]], + [[-60.0, -2.0], [-14965351.92, 679490.65]], + [[-69.0, -2.0], [-15964105.84, 679490.65]] +], +"description": "Test 5111 (part 1), Mercator (variant A), v2-0_2011-06-28.", +"projections": ["+init=epsg:4211", "+init=epsg:3001"], +"tests": [ + {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5111.2.json b/proj4/test/gigs/5111.2.json new file mode 100644 index 000000000000..03d43f41a7ce --- /dev/null +++ b/proj4/test/gigs/5111.2.json @@ -0,0 +1,44 @@ +{ +"coordinates": [ + [[-6.7200711, 77.6534822], [2800000.0, 15000000.0]], + [[-6.7200711, 73.1442856], [2800000.0, 13000000.0]], + [[-6.7200711, 67.0518325], [2800000.0, 11000000.0]], + [[-6.7200711, 58.9140458], [2800000.0, 9000000.0]], + [[-6.7200711, 48.2638981], [2800000.0, 7000000.0]], + [[-6.7200711, 34.8029044], [2800000.0, 5000000.0]], + [[-6.7200711, 18.7048581], [2800000.0, 3000000.0]], + [[-6.7200711, 0.9071392], [2800000.0, 1000000.0]], + [[3.1922806, 0.0], [3900000.0, 900000.0]], + [[-6.7200711, 0.9071392], [2800000.0, 800000.0]], + [[-6.7200711, 1.8140483], [2800000.0, 700000.0]], + [[-6.7200711, 2.0], [2800000.0, 679490.65]], + [[-6.7200711, 3.6262553], [2800000.0, 500000.0]], + [[-6.7200711, 4.531095], [2800000.0, 400000.0]], + [[-6.7200711, 5.4347892], [2800000.0, 300000.0]], + [[-6.7200711, 6.3371111], [2800000.0, 200000.0]], + [[-6.7200711, 7.2378372], [2800000.0, 100000.0]], + [[-31.9515111, 8.136745], [0.0, 0.0]], + [[-177.8077194, 2.0], [23764105.84, 679490.65]], + [[163.1922806, 2.0], [21655625.33, 679490.65]], + [[133.1922806, 2.0], [18326445.58, 679490.65]], + [[103.1922806, 2.0], [14997265.83, 679490.65]], + [[73.1922806, 2.0], [11668086.08, 679490.65]], + [[43.1922806, 2.0], [8338906.33, 679490.65]], + [[13.1922806, 2.0], [5009726.58, 679490.65]], + [[3.1922806, 2.0], [3900000.0, 679490.65]], + [[0.0, 2.0], [3545744.14, 679490.65]], + [[-6.7200711, 2.0], [2800000.0, 679490.65]], + [[-16.8077194, 2.0], [1680546.83, 679490.65]], + [[-46.8077194, 2.0], [-1648632.92, 679490.65]], + [[-76.8077194, 2.0], [-4977812.67, 679490.65]], + [[-106.8077194, 2.0], [-8306992.42, 679490.65]], + [[-136.8077194, 2.0], [-11636172.17, 679490.65]], + [[-166.8077194, 2.0], [-14965351.92, 679490.65]], + [[-175.8077194, 2.0], [-15964105.84, 679490.65]] +], +"description": "Test 5111 (part 2), Mercator (variant A), v2-0_2011-06-28.", +"projections": ["+init=epsg:4813", + "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs"], +"tests": [ {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} ] +} diff --git a/proj4/test/gigs/5112.json b/proj4/test/gigs/5112.json new file mode 100644 index 000000000000..2b6529339a44 --- /dev/null +++ b/proj4/test/gigs/5112.json @@ -0,0 +1,15 @@ +{ +"coordinates": [ + [[51.0, 42.0], [0.0, 3819897.85]], + [[51.0, 0.0], [0.0, 0.0]], + [[57.0, 0.0], [497112.88, 0.0]], + [[54.0, 20.5], [248556.44, 1724781.5]], + [[67.0, -41.0], [1325634.35, -3709687.25]] + ], +"description": "Test 5112, Mercator (variant B), v2-0_2011-06-28.", +"projections": ["+init=epsg:4284", "+init=epsg:3388"], +"tests": [ + {"tolerances": [5.555555555555555e-07, 0.05], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"} + ] +} diff --git a/proj4/test/gigs/5113.json b/proj4/test/gigs/5113.json new file mode 100644 index 000000000000..945e4c44e996 --- /dev/null +++ b/proj4/test/gigs/5113.json @@ -0,0 +1,12 @@ +{ +"description": "Test 5113, Transverse Mercator (South Oriented), v2-0_2011-06-28.", +"coordinates": [ [[22.5, 0.0], [-166998.44, 0.0]], + [[21.5, -25.0], [-50475.46, 2766147.25]], + [[20.5, -30.0], [48243.45, 3320218.65]], + [[19.5, -35.0], [136937.65, 3875621.18]], + [[19.5, -35.0], [136937.65, 3875621.18]] + ], +"projections": ["+init=epsg:4148", "+init=epsg:2049"], +"tests": [{"tolerances": [2.7777777777777776e-07, 0.03], "type": "conversion"}, + {"times": 1000, "tolerances": [5.555555555555556e-08, 0.006], "type": "roundtrip"}] +} diff --git a/proj4/test/gigs/5201.json b/proj4/test/gigs/5201.json new file mode 100644 index 000000000000..e1ffdd779bc4 --- /dev/null +++ b/proj4/test/gigs/5201.json @@ -0,0 +1,39 @@ +{ +"description" : "Test 5201, Geographic Geocentric conversions, v2.0_2011-09-28. (EPSG 4979 - WGS84 3d has been replaced with EPSG code 4326 WGS84 2d).", +"projections" : [ "+init=epsg:4978", "+init=epsg:4326" ], + +"coordinates": [ + [ [-962479.5924, 555687.8517, 6260738.6526], [150, 80, 1214.137] ], + [ [-962297.0059, 555582.4354, 6259542.961], [150, 80, 0] ], + [ [-1598248.169, 2768777.623, 5501278.468], [119.99524538, 60.00475191, 619.6317] ], + [ [-1598023.169, 2768387.912, 5500499.045], [119.99524470, 60.00475258, -280.3683] ], + [ [2764210.4054, 4787752.865, 3170468.5199], [60, 30, 189.569] ], + [ [2764128.3196, 4787610.6883, 3170373.7354], [60, 30, 0] ], + [ [6377934.396, -112, 434], [-0.00100615, 0.00392509, -202.5882] ], + [ [6374934.396, -112, 434], [-0.00100662, 0.00392695, -3202.5881] ], + [ [6367934.396, -112, 434], [-0.00100773, 0.00393129, -10202.5881] ], + [ [2764128.3196, -4787610.6883, -3170373.7354], [-60, -30, 0] ], + [ [2763900.3489, -4787215.8313, -3170110.4974], [-60, -30, -526.476] ], + [ [2763880.8633, -4787182.0813, -3170087.9974], [-60, -30, -571.476] ], + [ [-1598023.169, -2768611.912, -5499631.045], [-119.99323757, -59.99934884, -935.0995] ], + [ [-1597798.169, -2768222.201, -5498851.622], [-119.99323663, -59.99934874, -1835.0995] ], + [ [-962297.0059, -555582.4354, -6259542.961], [-150, -80, 0] ], + [ [-962150.945, -555498.1071, -6258586.4616], [-150, -80, -971.255] ], + [ [-961798.2951, -555294.5046, -6256277.0874], [-150, -80, -3316.255] ], + [ [-2187336.719, -112, 5971017.093], [-179.99706624, 70.00490733, -223.6178] ], + [ [-2904698.5551, -2904698.5551, 4862789.0377], [-135, 50, 0] ], + [ [371, -5783593.614, 2679326.11], [-89.99632465, 25.00366329, -274.7286] ], + [ [6378137, 0, 0], [0, 0, 0] ], + [ [-4087095.478, 2977467.559, -3875457.429], [143.92649252, -37.65282217, 737.7182] ], + [ [-4085919.959, 2976611.233, -3874335.274], [143.92649211, -37.65282206, -1099.2288] ], + [ [-4084000.165, 2975212.729, -3872502.631], [143.92649143, -37.65282187, -4099.2288] ], + [ [-4079520.647, 2971949.553, -3868226.465], [143.92648984, -37.65282143, -11099.2288] ], + [ [-2904698.5551, 2904698.5551, -4862789.0377], [135, -50, 0] ], + [ [-2187336.719, -112, -5970149.093], [-179.99706624, -70.00224647, -1039.2896] ] +], + +"tests" : [ + {"type": "conversion", "tolerances": [0.01, [8.333333333333333e-08, 8.333333333333333e-08, 0.01]]}, + {"type": "roundtrip", "times":1000, "tolerances": [0.006, [5.555555555555556e-08, 5.555555555555556e-08, 0.006]] } +] +} diff --git a/proj4/test/gigs/5203.1.json b/proj4/test/gigs/5203.1.json new file mode 100644 index 000000000000..658e7857beb7 --- /dev/null +++ b/proj4/test/gigs/5203.1.json @@ -0,0 +1,25 @@ +{ +"description": "GIGS Test 5203 (part 1), Position Vector 7-parameter transformation, v2.0_2011-06-28. Geographic 2D domain (EPSG method code 9606).", +"projections" : [ "+init=epsg:4277", "+init=epsg:4326" ], + +"coordinates" : [ + [ [150.00567472, 79.99487333], [150.0, 80.0] ], + [ [120.0, 60.0], [119.99435889, 60.00569306] ], + [ [60.00446778, 29.99566778], [60.0, 30.0] ], + [ [0.0, 0.0], [-0.00089056, 0.00483333] ], + [ [-60.00357056, -30.00504639], [-60.0, -30.0] ], + [ [-120.0, -60.0], [-119.9918525, -59.99907361] ], + [ [-150.01693111, -79.99778139], [-150.0, -80.0] ], + [ [-180.0, 70.0], [-179.99637361, 70.005945] ], + [ [-135.00596333, 49.99458694], [-135.0, 50.0] ], + [ [-90.0, 25.0], [-89.99531139, 25.00445833] ], + [ [0.00089056, -0.00483333], [0.0, 0.0] ], + [ [143.9279419, -37.6532236], [143.92634806, -37.65235306] ], + [ [135.00291194, -49.99973028], [135.0, -50.0] ], + [ [180.0, -70.0], [-179.99660139, -70.002485] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08] } + ] +} diff --git a/proj4/test/gigs/5204.1.json b/proj4/test/gigs/5204.1.json new file mode 100644 index 000000000000..06347e642a42 --- /dev/null +++ b/proj4/test/gigs/5204.1.json @@ -0,0 +1,25 @@ +{ +"description" : "GIGS Test 5204, Coordinate Frame 7-parameter transformation, v2.0_2011-06-28. Geographic 2D domain (EPSG method code 9607)", +"projections" : [ "+init=epsg:4313", "+init=epsg:4326" ], + +"coordinates" : [ + [ [149.99825389, 80.00155167], [150, 80] ], + [ [120, 60], [120.00197111, 59.99807333] ], + [ [59.99822194, 30.00134083], [60, 30] ], + [ [0, 0], [0.00098139, -0.00081028] ], + [ [-59.99991333, -29.99943917], [-60, -30] ], + [ [-120, -60], [-120.00150694, -59.999835] ], + [ [-149.99532167, -80.00054917], [-150, -80] ], + [ [-180, 70], [179.99939778, 69.99812806] ], + [ [-134.99891389, 50.00183], [-135, 50] ], + [ [-90, 25], [-90.00060583, 24.99862667] ], + [ [-0.00098139, 0.00081028], [0, 0] ], + [ [143.9279419, -37.6532236], [143.92857222, -37.65257083] ], + [ [134.99913472, -50.00096139], [135, -50] ], + [ [180, -70], [179.99888667, -69.99901667] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08] } + ] +} diff --git a/proj4/test/gigs/5205.1.json b/proj4/test/gigs/5205.1.json new file mode 100644 index 000000000000..e0c41ff31bf4 --- /dev/null +++ b/proj4/test/gigs/5205.1.json @@ -0,0 +1,25 @@ +{ +"description" : "GIGS Test 5205 (Part 1), Molodensky-Badekas 10-parameter transformation, v2.0_2011-06-28. Geographic 2D domain (EPSG method code 9636)", +"projections" : [ "+init=epsg:4289", "+init=epsg:4326" ], + +"coordinates": [ + [ [150.01814371, 79.99494639], [150, 80] ], + [ [120, 60], [119.99001559, 60.00441792] ], + [ [60.00535007, 29.99746103], [60, 30] ], + [ [0, 0], [-0.00007025, 0.0041133] ], + [ [-60.00473241, -30.0042486], [-60, -30] ], + [ [-120, -60], [-119.9922412, -60.00081456] ], + [ [-150.01209192, -79.99612229], [-150, -80] ], + [ [-180, 70], [179.99786174, 70.00666951] ], + [ [-135.00454845, 49.99357566], [-135, 50] ], + [ [-90, 25], [-89.99487454, 25.00457271] ], + [ [0.00007032, -0.00411349], [0, 0] ], + [ [143.9279419, -37.6532236], [143.92330599, -37.65282034] ], + [ [135.00641074, -49.99958243], [135, -50] ], + [ [180, -70], [179.99847886, -70.00362084] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08] } + ] +} diff --git a/proj4/test/gigs/5206.json b/proj4/test/gigs/5206.json new file mode 100644 index 000000000000..d5a26252f99f --- /dev/null +++ b/proj4/test/gigs/5206.json @@ -0,0 +1,54 @@ +{ +"description" : "Test 5206, NADCON transformation, v2.0_2011-06-28. Out of transform grid area error tests have been removed.", +"projections" : [ "+init=epsg:4267", "+init=epsg:4269" ], + +"coordinates": [ + [ [-89.5177272, 29.9997978], [-89.5177778, 30.0000000] ], + [ [-90.5177778, 29.2833333], [-90.5178639, 29.2835592] ], + [ [-91.5176758, 28.2830864], [-91.5177778, 28.2833333] ], + [ [-92.5177778, 27.2833333], [-92.5178811, 27.2836106] ], + [ [-93.5176731, 26.2830225], [-93.5177778, 26.2833333] ], + [ [-94.5177778, 25], [-94.5178744, 25.0003486] ], + [ [-142.9972522, 70.0001631], [-143, 70] ], + [ [-142, 70.0000000], [-142.0026922, 69.9998422] ], + [ [-141.9973078, 70.0001578], [-142, 70] ], + [ [-140.9971981, 70.0001481], [-141, 70] ], + [ [-140, 70], [-140.0027922, 69.9998617] ], + [ [-138.9973075, 70.0001297], [-139, 70] ], + [ [-138, 70], [-138.0026767, 69.9998867] ], + [ [-134.9973733, 70.000055], [-135, 70] ], + [ [-130, 70], [-130.0025347, 70.0000511] ], + [ [-128.0009742, 69.9999053], [-128.0034722, 70] ], + [ [-179, 70], [-179.0035064, 69.9990142] ], + [ [-179.9964664, 70.0010089], [180, 70] ], + [ [180, 70], [179.9964664, 69.9989911] ], + [ [179, 70], [178.9964394, 69.9989678] ], + [ [-111.9991714, 49.9999556], [-112, 49.9999997] ], + [ [-112, 49.9999997], [-112.0008286, 50.0000439] ], + [ [-111.9991214, 49.0000033], [-112, 49] ], + [ [-112, 48], [-112.0008492, 47.9999606] ], + [ [-111.9991678, 47.0000569], [-112, 47] ], + [ [-112, 47], [-112.0008325, 46.9999431] ], + [ [-111.9991756, 46.0000733], [-112, 46] ], + [ [-112, 45], [-112.0008022, 44.9999197] ], + [ [-130.5177467, 51], [-130.5193953, 50.9997114] ], + [ [-130.5160981, 51.0002886], [-130.5177467, 51] ], + [ [-130.5161206, 50.0002897], [-130.5177467, 49.9999997] ], + [ [-130.5177467, 49.9999997], [-130.5193731, 49.9997097] ], + [ [-130.5161458, 49.0002717], [-130.5177467, 49] ], + [ [-130.5177467, 48.1166667], [-130.5193258, 48.1164106] ], + [ [-130.5161942, 47.0002378], [-130.5177467, 47] ], + [ [-130.5177467, 47], [-130.5192992, 46.9997622] ], + [ [-130.5162172, 46.0002222], [-130.5177467, 46] ], + [ [-130.5177467, 45], [-130.5192539, 44.9997925] ], + [ [-132.9984775, 48.1169867], [-133, 48.1166667] ], + [ [-131.4555556, 48.1166667], [-131.4571578, 48.1163964] ], + [ [-130.5161675, 48.1169228], [-130.5177467, 48.1166667] ], + [ [-128.4555556, 48.1166667], [-128.4570433, 48.1164319] ], + [ [-128.5444444, 48.1166667], [-128.5459361, 48.1164311] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08] } + ] +} diff --git a/proj4/test/gigs/5207.1.json b/proj4/test/gigs/5207.1.json new file mode 100644 index 000000000000..aa4e0f0750f5 --- /dev/null +++ b/proj4/test/gigs/5207.1.json @@ -0,0 +1,30 @@ +{ +"description" : "Test 5207, NTv2 transformation, v2.0_2011-06-28. Out of transform grid area error tests have been removed.", +"projections" : [ "+init=epsg:4202", "+init=epsg:4283" ], + +"coordinates": [ + [ [-115, -10.05], [-115.001251111111, -10.048637222222] ], + [ [-114.998744166667, -11.001359444445], [-115, -11] ], + [ [-115, -12], [-115.001261388889, -11.998644166667] ], + [ [-138.04, -9], [-138.041132777778, -8.998543333333] ], + [ [-138.043867222222, -9.001456666667], [-138.045, -9] ], + [ [-138.05, -9], [-138.051132777778, -8.998543333333] ], + [ [-138.048867222222, -9.001456666667], [-138.05, -9] ], + [ [-138.053867222222, -9.001456666667], [-138.055, -9] ], + [ [-138.06, -9], [-138.061132777778, -8.998543333333] ], + [ [-138.038730833333, -27.126476388889], [-138.04, -27.125] ], + [ [-138.045, -27.125], [-138.046268888889, -27.123523611111] ], + [ [-138.05, -27.125], [-138.051268888889, -27.123523611111] ], + [ [-138.048731111111, -27.126476388889], [-138.05, -27.125] ], + [ [-138.055, -27.125], [-138.056268888889, -27.123523333333] ], + [ [-138.058731111111, -27.126476666667], [-138.06, -27.125] ], + [ [-136.847222222222, -28.05], [-136.848525277778, -28.048526944445] ], + [ [-137.847222222222, -28.05], [-137.848505555556, -28.048531111111] ], + [ [-138.847222222222, -28.05], [-138.8484925, -28.048518888889] ], + [ [-139.847222222222, -28.05], [-139.848475277778, -28.048507222222] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08]} + ] +} diff --git a/proj4/test/gigs/5207.2.json b/proj4/test/gigs/5207.2.json new file mode 100644 index 000000000000..cf5c4cd6b0c9 --- /dev/null +++ b/proj4/test/gigs/5207.2.json @@ -0,0 +1,47 @@ +{ +"description" : "Test 5206, NADCON transformation, v2.0_2011-06-28. Out of transform grid area error tests have been removed.", +"projections" : [ "+init=epsg:4267", "+init=epsg:4269" ], + +"coordinates": [ + [ [-142, 70], [-142.002804722222, 69.999806944445] ], + [ [-141.997195277778, 70.000193055556], [-142, 70] ], + [ [-140.997219722222, 70.000179166667], [-141, 70] ], + [ [-140, 70], [-140.002795277778, 69.999828055556] ], + [ [-138.997199444444, 70.000160833333], [-139, 70] ], + [ [-138, 70], [-138.002957222222, 69.999875555556] ], + [ [-134.997081944444, 70.000046388889], [-135, 70] ], + [ [-130, 70], [-130.002737222222, 70.000053333333] ], + [ [-128.000734722222, 69.999866388889], [-128.003472222222, 70] ], + [ [-128, 70], [-128.002737777778, 70.000133611111] ], + [ [-125.997388333333, 69.999778055556], [-126, 70] ], + [ [-88.005575, 70], [-88.0056825, 70.000609444445] ], + [ [-88, 70], [-88.000107222222, 70.000609166667] ], + [ [-87.999893333333, 69.999390833333], [-88, 70] ], + [ [-87.6610917, 70], [-87.661171666667, 70.000603333333] ], + [ [-112.165693333333, 51.016955555556], [-112.166607777778, 51.017009444445] ], + [ [-111.999093888889, 50.999949166667], [-112, 51] ], + [ [-111.999095277778, 49.999959722222], [-112, 49.999999722222] ], + [ [-112, 49.999999722222], [-112.000904638889, 50.000039666667] ], + [ [-111.9991175, 49.000006388889], [-112, 49] ], + [ [-112, 48], [-112.0008525, 47.999988888889] ], + [ [-111.999174722222, 47.000009722222], [-112, 47] ], + [ [-112, 47], [-112.000825277778, 46.999990277778] ], + [ [-130.517746666667, 51], [-130.519401944444, 50.999771388889] ], + [ [-130.516091666667, 51.000228611111], [-130.517746666667, 51] ], + [ [-130.516041666667, 50.000246111111], [-130.517746666667, 49.999999722222] ], + [ [-130.517746666667, 49.999999722222], [-130.519451666667, 49.999753333333] ], + [ [-130.516067222222, 49.0002825], [-130.517746666667, 49] ], + [ [-130.517746666667, 48], [-130.519391111111, 47.999679444445] ], + [ [-130.516146944444, 47.000361111111], [-130.517746666667, 47] ], + [ [-130.517746666667, 47], [-130.519346388889, 46.999638611111] ], + [ [-132.998205277778, 48.117026388889], [-133, 48.116666666667] ], + [ [-131.455555555556, 48.116666666667], [-131.457260277778, 48.116333055556] ], + [ [-130.516098055556, 48.116982777778], [-130.517746666667, 48.116666666667] ], + [ [-128.455555555556, 48.116666666667], [-128.457086944444, 48.116392777778] ], + [ [-128.5444, 48.1167066], [-128.545936111111, 48.116431111111] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08] } + ] +} diff --git a/proj4/test/gigs/5208.json b/proj4/test/gigs/5208.json new file mode 100644 index 000000000000..4242c1755099 --- /dev/null +++ b/proj4/test/gigs/5208.json @@ -0,0 +1,25 @@ +{ +"description": "Test 5208, Longitude Rotation, v2.0_2011-06-28.", +"projections" : [ "+init=epsg:4275", "+init=epsg:4807" ], + +"coordinates": [ + [ [5, 58], [2.66277083, 58] ], + [ [5, 56], [2.66277083, 56] ], + [ [5, 55], [2.66277083, 55] ], + [ [5, 53], [2.66277083, 53] ], + [ [4, 51], [1.66277083, 51] ], + [ [4, 49], [1.66277083, 49] ], + [ [2.33722917, 46.8], [0, 46.8] ], + [ [3, 53], [0.66277083, 53] ], + [ [4, 53], [1.66277083, 53] ], + [ [6, 53], [3.66277083, 53] ], + [ [7, 53], [4.66277083, 53] ], + [ [9, 53], [6.66277083, 53] ], + [ [10, 53], [7.66277083, 53] ], + [ [11, 53], [8.66277083, 53] ] +], + +"tests" : [ {"type": "conversion", "tolerances": [2.7777777777777776e-07, 2.7777777777777776e-07]}, + {"type": "roundtrip", "times":1000, "tolerances": [5.555555555555556e-08, 5.555555555555556e-08] } + ] +} diff --git a/proj4/test/gigs/TESTNOTES.md b/proj4/test/gigs/TESTNOTES.md new file mode 100644 index 000000000000..003872e858ba --- /dev/null +++ b/proj4/test/gigs/TESTNOTES.md @@ -0,0 +1,225 @@ +## TEST JSON ########################################################### + +This is the testing framework that uses JSON formated files that tests +PROJ.4 using Geospatial Integrity of Geoscience Sofware (GIGS) calculations. +This could be used as a framework for testing projections from other +sources. + + +For more information about the Geospatial Integrity of Geoscience Software +(GIGS) at +http://www.iogp.org/Geomatics#2521115-gigs + +## Geospatial Integrity of Geoscience Software License ################# + +The disclaimer and copyright **only** applies to JSON files that originate +from GIGS tests, which is a reformatting material provided by the +International Association of Oil & Gas Producers. + +**Disclaimer** + +Whilst every effort has been made to ensure the accuracy of the information contained in this publication, +neither the OGP nor any of its members past present or future warrants its accuracy or will, regardless +of its or their negligence, assume liability for any foreseeable or unforeseeable use made thereof, which +liability is hereby excluded. Consequently, such use is at the recipient’s own risk on the basis that any use +by the recipient constitutes agreement to the terms of this disclaimer. The recipient is obliged to inform +any subsequent recipient of such terms. + +This document may provide guidance supplemental to the requirements of local legislation. Nothing +herein, however, is intended to replace, amend, supersede or otherwise depart from such requirements. In +the event of any conflict or contradiction between the provisions of this document and local legislation, +applicable laws shall prevail. + +**Copyright notice** + +The contents of these pages are © The International Association of Oil & Gas Producers. Permission +is given to reproduce this report in whole or in part provided (i) that the copyright of OGP and (ii) +the source are acknowledged. All other rights are reserved.” Any other use requires the prior written +permission of the OGP. + +These Terms and Conditions shall be governed by and construed in accordance with the laws of +England and Wales. Disputes arising here from shall be exclusively subject to the jurisdiction of the +courts of England and Wales. + + +## INSTALLING ########################################################## + + * Requires: Python 2.7 or 3.3+ + * pyproj (optional but highly recommended), this speeds up tests, makes + results more precise but has the trade-off of making installation a + little more complicated. + + + +### Installing pyproj ################################################## + + 1) Install `pip` (usually `pip3`) if not installed, should already be installed on new Python + versions (Python 3 >=3.4) or if using a virtual environment for python. + see https://pip.pypa.io/en/stable/installing/ + * **Note**: if you have Python 2.x and 3.x installed, `pip3` is for Python 3.x. + `pip` could be an alias for either one. + 2) Upgrade `pip` (possibly not needed) + https://pip.pypa.io/en/stable/installing/#upgrading-pip + 3) Install pyproj + * requires a C/C++ compiler be usuable by python + * repository version requires Cython to be installed, releases do not require this + +``` + $ pip install cython +``` + + * install latest release + * set PROJ_DIR environment variable to an installed version of PROJ4 + library. This should have the directories include/ lib/ & + share/proj/ underneath it. + + * installing on Linux (default ./configure settings for PROJ.4) + +``` + $ PROJ_DIR=/usr/local pip install pyproj +``` + +## Running Tests ####################################################### + +When calling test_json.py it defaults to using pyproj driver. + +``` + $ python test_json.py 5*.json +``` + +There is a driver to directly use cs2cs instead of installing pyproj, but +it is much slower and not recommended. + +Here is how you run the cs2cs driver: + +``` + $ python test_json.py -d cs2cs -e path/to/repo/bin/cs2cs 5201.json +``` + + +## GIGS Test ########################################################### + +Tests that were meant to test for out of grid errors were removed from +testing. PROJ.4 cs2cs provides coordinates seemingly without warnings +or errors. + +### Drastic Tolerance Errors ########################################### + +These are errors that might indicate the wrong projection is being used, +wrong parameters are being used in the projection, or problems with the +projection itself. It could point to problems with the provided model. + + * 5101 part 4 - Transverse Mercator + - EPSG code will need to be redefined to make sure that etmerc version + is used, should be done before next release (4.9.3 / 4.10.0 ?) + - Temporarily use test "5101.4-jhs-etmerc.json", perhaps remove file + when etmerc/tmerc aliasing issue has been fixed. + * 5102 part 2 - Lambert Conic Conformal (1SP) + - This one seems to have some problems. + * 5105 part 1 - Oblique Mercator (variant B) + - There are some drastically different answers. + +### Slight Tolerance Errors ############################################ + +These tests have results with rounding errors that are slightly out of +tolerance. This could be due to a lack of precision in the JSON file +or due to the formula's precision. Most of these tests fail with some +point in testing 1,000 round trip coordinate conversions. A few of these +might require a little bit of tuning with cs2cs. There are some rather +concerning differences between Python 2.7 and Python 3.4 in testing, which +needs to be pinpointed. + + * 5101 part 1 - Transverse Mercator + - roundtrip tests fail with very slight tolerance issues + * 5104 - Oblique stereographic + - roundtrip tests fail with very slight tolerance issues + * 5105 part 2 - Oblique Mercator (variant B) + - roundtrip tests fail with tolerance issues + * 5106 - Hotline Oblique Mercator (variant A) + - roundtrip tests fail with very slight tolerance issues + * 5108 - Cassini-Soldner + - roundtrip tests seem to accumulate errors + * 5110 - Lambert Azimuthal Equal Area + - roundtrip tests have some slight errors + * 5111 part 1 - Mercator (variant A) + - roundtrip tests fail with very slight tolerance issues + * 5111 part 2 - Mercator (variant A) + * 5203 part 1 - Position Vector 7-parameter transformation + - most seem to be rounding errors. Some results cross longitude + line 180/-180 + * 5204 part 1 - Coordinate Frame 7-parameter transformation + - most seem to be rounding errors. Some results cross longitude + line 180/-180 + * 5205 part 1 - Molodensky-Badekas 10-parameter transformation + - most seem to be rounding errors. Some results cross longitude + line 180/-180 + * 5206 - NADCON transformation + * 5207 parts 1 & 2 - NTv2 transformation + + +### Other Issues with Tests ############################################ + * 5201 - Geographic Geocentric conversions + - EPSG code 4979, does not exist in PROJ.4 substituted EPGS code 4326. + - The test passes. + * 5206 and 5207 parts 1 & 2 - NADCON Transformation and NTv2 Transformation + - These tests have cases that are out of grid, which have been omitted. + The GIGS tests expectations, "[n]ote 1: This location is out of + transformation grid area - the attempted transformation should fail + and application notify user." + + +## Passing Tests ####################################################### + * 5101 part 2 - Transverse Mercator + * 5101 part 3 - Transverse Mercator + * 5102 part 1 - Lambert Conic Conformal (1SP) + * 5103 part 1 - Lambert Conic Conformal (2SP) + * 5103 part 2 - Lambert Conic Conformal (2SP) + * 5103 part 3 - Lambert Conic Conformal (2SP) + * 5107 - American Polyconic + * 5109 - Albers Equal Area + * 5112 - Mercator (variant B) + * 5113 - Transverse Mercator (South Oriented) + * 5208 - Longitude Rotation + + + +## Benchmarks ########################################################## + +Benchmarks were made using Micah Cochran's circa 2008 Desktop computer +using LXLE Ubuntu Linux 14.04. The pattern "5*.json" was used for testing. + +This is the computer time used for the process, not the actual run time. + * pyproj driver testing 5 seconds + * cs2cs driver testing - using Python 2.7.6 - 4 min 36 seconds + * cs2cs driver testing - using Python 3.4.3 - 6 min 23 seconds + + + +## Random Notes ####################################################### +Roundtrip testing has been fixed, it now checks both resulting coordinates. + +Some tests in the 5100/5200 series have not been converted. The most of +the 3d coordinate test in the 5200 series have not been converted. + +This is designed to use decimal degrees over Sexagesimal degree or degree +minutes seconds, which is a decision that might need to be revisited. +Decimal degrees were chosen because it was easier interface with the +Python pyproj library. This might be the cause of some testing tolerance +issues. + +pyproj and cs2cs drivers do not quite work the same. Different tests +fail depending on the driver. + +Other drivers could be written to interface with other code. + +There could be some precision issues with cs2cs, perhaps some adjustment +of the "-f format" parameter could help. This could be done based either +on expected output or extra info from the JSON file. + +A TODO list is located source code. + +Conversion tests the output coordinate, causing 2 test results per +coordinate pair. + +Roundtrip tests the input coordinate and the output coordinate of each + pair, causing 4 test results per coordinate pair. diff --git a/proj4/test/gigs/test_json.py b/proj4/test/gigs/test_json.py new file mode 100644 index 000000000000..2c1f9f024a1b --- /dev/null +++ b/proj4/test/gigs/test_json.py @@ -0,0 +1,528 @@ +# This is a framework to test GIGS, Geospatial Integrity of geoscience +# software. Which is published by International Association of Oil & Gas +# Producers as a resources for how geospatial software should give consistent +# and expected results. +# +# This could be expanded to be used with other testing frameworks. +# +# - See more at: http://www.iogp.org/Geomatics#2521115-gigs +# + +# +# == REQUIREMENTS == +# - Python 2.7 or 3.3+ +# - pyproj (optional but highly recommended) - read TESTNOTES.md + +# == TODO list == +# * Python 3 was not running all the test cases seemingly due to how it uses +# an iterable version of zip. -- FIXED +# * driver for proj4js (javascript) +# - could be written using nodejs using subprocess +# - could use PyExecJS (currently not advanced enough) or PyV8 +# * call cs2cs directly +# - WORKING but 2 orders of magnitude slower than pyproj, and +# potentially insecure shelling? + + +import argparse +import glob +import json +import logging +import os +import platform +import sys +import subprocess +from tempfile import NamedTemporaryFile + +# only for debug +# import pdb + +try: + import pyproj +except ImportError as e_pyproj: + pass + + +PY_MAJOR = sys.version_info[0] +PY2 = (PY_MAJOR == 2) + +# Python 2/3 Compatibility code ######################################## +if PY_MAJOR >= 3: + # list-producing versions of the major Python iterating functions + # lzip acts like Python 2.x zip function. + # taken from Python-Future http://python-future.org/ + # future.utils.lzip() + + def lzip(*args, **kwargs): + return list(zip(*args, **kwargs)) + +else: + from __builtin__ import zip as lzip +######################################################################## + + +def list_count_matches(coords, ex_coords, tolerance): + """ + counts coordinates in lists that match and don't match. + assumes that lists are the same length (they should be) + + coords - coordinates + ex_cords - expected cooridnate + tolerance - difference allowed between the coordinates + + returns tuple (matches, non_matches) + """ + matches, non_matches = 0, 0 + iter_ex_coords = iter(ex_coords) + for c in coords: + ex_coord = next(iter_ex_coords) + if match_func(c, ex_coord, tolerance): + matches = matches + 1 + else: + non_matches = non_matches + 1 + + return (matches, non_matches) + + +def match_func(cor, exc, tolerance): + """ + Check if coordinate matches expected coordinate within a given tolerance. + + cor - coordinate + exc - expected coordinate + tolerance - error rate + float coordinate elements will be checked based on this value + list/tuple coordinate elements will be checked based on the + corresponding values + return bool + """ + if len(exc) == 3: + # coordinate triples + coord_diff = abs(cor[0] - exc[0]), abs(cor[1] - exc[1]), abs(cor[2] - exc[2]) + if isinstance(tolerance, float): + matching = coord_diff < (tolerance, tolerance, tolerance) + elif isinstance(tolerance, (list, tuple)): # FIXME is list's length atleast 3? + matching = coord_diff < tuple(tolerance) + else: + # assume coordinate pairs + coord_diff = abs(cor[0] - exc[0]), abs(cor[1] - exc[1]) + if isinstance(tolerance, float): + matching = coord_diff < (tolerance, tolerance) + elif isinstance(tolerance, (list, tuple)): # FIXME is list's length atleast 2? + matching = coord_diff < tuple(tolerance) + + if matching is False: + logging.info('non-match, calculated coordinate: {c1}\n' + 'expected coordinate: {c2}\n difference:{res}\n' + 'tolerance: {tol}\n' + ''.format(c1=cor, c2=exc, res=coord_diff, tol=tolerance)) + + return matching + + +# parse multiple tests and call TransformTest +# TODO: needs some awareness of the driver, so driver_info function in +# TranformTest classes can be called, could allow a dummy instance of +# Driver and move all the initization code to another function? Or allow +# dipatch function to check if everything is in order do a transform. +# Not an elegant solution. +class TransformRunner(object): + def __init__(self, fn_pattern, driver, **kwargs): + """ + fn_pattern - file name or file name pattern (example "*.json") + driver - this is the type of driver to run + kwargs - parameters passed to the respective driver TransfromTest class + """ + self.driver = driver + json_input = [] + if os.path.isfile(fn_pattern): + with open(fn_pattern, 'rt') as fp: + logging.info("Reading json from file '{0}'".format(fn_pattern)) + json_dict = json.load(fp, parse_int=float) + json_dict['filename'] = fn_pattern + json_input = [json_dict] + # is this a glob/fnmatch style pattern? + elif '*' in fn_pattern or '?' in fn_pattern: + filename_iter = glob.iglob(fn_pattern) + for filename in filename_iter: + with open(filename, 'rt') as fp: + logging.info("Reading json from file '{0}'".format(filename)) + j_input = json.load(fp, parse_int=float) + if isinstance(j_input, dict): + j_input['filename'] = filename + json_input.append(j_input) + elif isinstance(j_input, list): + # FIXME could build a new list with the filename dict + logging.warning("json file is a list, not quite supported - FIXME") + json_input.extend(j_input) + else: + raise ValueError('json input in an unknown type') + else: + raise TypeError('filename_pattern must be a valid filename or pattern') + + self.runs = json_input + self.kwargs = kwargs + + def dispatch(self): + """ + main loop to run all the tests + """ + total_matches, total_no_matches, success_code = 0, 0, 0 + for run in self.runs: + if self.driver == 'pyproj': + trantst = TransformTestPyProj(run, self.kwargs) + elif self.driver == 'cs2cs': + trantst = TransformTestCs2cs(run, self.kwargs) + else: + raise ValueError("driver {0} is not a valid test driver".format(self.driver)) + matches, no_matches = trantst.dispatch() + total_matches += matches + total_no_matches += no_matches + success_code += no_matches + + return total_matches, total_no_matches, success_code + + +# parses and runs a single GIGS test case +class TransformTestBase(object): + """ + TransformTest common code for testing framework. + """ + def __init__(self, json_dict, kwargs): + """ + json_dict must dictonary from json + """ + if not isinstance(json_dict, dict): # must be a json dictionary + raise TypeError("json_source must be a dictionary type not {0}" + "".format(type(json_dict))) + + # require keys 'coordinates' and 'projections' + if 'coordinates' not in json_dict: + raise KeyError("TransformTest.__init__ requires 'coordinates' key" + " in json source input") + + if 'projections' not in json_dict: + raise KeyError("TransformTest.__init__ requires 'projections' key" + " in json source input") + + logging.info('Number of coordinate pairs to test: {0}'.format( + len(json_dict['coordinates']))) + + self.run_test_args = kwargs.get('test') + + # unpack coordinates + self.coords_left, self.coords_right = lzip(*json_dict['coordinates']) + + self.testobj = json_dict + + def runner_conversion(self, **kwargs): + """ + tests a single conversion + + return tuple (num_matches, num_no_matches) + """ + + # get tolerance, if not set tolerance to a precise value + tolerances = kwargs.get('tolerances', [0.0000000000001, 0.0000000000001]) + + test_right = self.transform(self.proj_left, self.proj_right, self.coords_left) + test_left = self.transform(self.proj_right, self.proj_left, self.coords_right) + + results1 = list_count_matches(test_right, self.coords_right, tolerances[1]) + results2 = list_count_matches(test_left, self.coords_left, tolerances[0]) + + return (results1[0] + results2[0], results1[1] + results2[1]) + + def runner_roundtrip(self, **kwargs): + """ + rountrip test using pyproj. + + times - number roundtrips to perform + tolerance - TODO explain the structure of why this is a list + + return tuple (num_matches, num_no_matches) + """ + times = None + + # get variables + times = int(kwargs.get('times')) + tolerances = kwargs.get('tolerances', [0.0000000000001, 0.0000000000001]) + + # keep the transformations separate, so as to not cross contaminate the + # results. + + # process roundtrip for the left coordinates - Test 1 + test1_left = self.coords_left + for i in range(times): + test1_right = self.transform(self.proj_left, self.proj_right, test1_left) + test1_left = self.transform(self.proj_right, self.proj_left, test1_right) + + # process roundtrip for the right coordinates - Test 2 + test2_right = self.coords_right + for i in range(times): + test2_left = self.transform(self.proj_right, self.proj_left, test2_right) + test2_right = self.transform(self.proj_left, self.proj_right, test2_left) + + results = ( + list_count_matches(test1_right, self.coords_right, tolerances[1]), + list_count_matches(test1_left, self.coords_left, tolerances[0]), + list_count_matches(test2_right, self.coords_right, tolerances[1]), + list_count_matches(test2_left, self.coords_left, tolerances[0]) + ) + + return tuple(sum(x) for x in lzip(*results)) + + # TODO: Untested. Not useful for GIGS. + def runner_onedirection(self, **kwargs): + """ + Perform a conversion in only one direction, not both. Useful for + testing convergence of a coordinate system. + + return tuple (num_matches, num_no_matches) + """ + # get variables + direction = kwargs.get('direction') + # get tolerance, if not set tolerance to a precise value + tolerances = kwargs.get('tolerances', [0.0000000000001, 0.0000000000001]) + + if direction not in ('left-to-right', 'right-to-left'): + raise ValueError('direction must be left-to-right or right-to-left, not: {0}'.format(direction)) + + if direction == 'left-to-right': + test_dest_right = self.transform(self.proj_left, self.proj_right, self.coords_left) + results = list_count_matches(test_dest_right, self.coords_right, tolerances[1]) + elif direction == 'right-to-left': + test_dest_left = self.transform(self.proj_right, self.proj_left, self.coords_right) + results = list_count_matches(test_dest_left, self.coords_left, tolerances[0]) + else: + raise RuntimeError('Unexpected state of value direction "{0}" in runner_onedirection'.format(direction)) + + return results + + # placeholder function + def transform(self, src_crs, dst_crs, coords): + pass + + def dispatch(self): + """ + main + """ + matches, no_matches = 0, 0 + + # convert to tuple + run_tests = self.run_test_args, + if self.run_test_args is None: + run_tests = ('conversion', 'roundtrip') + + logging.info('Testing: {0}'.format(self.testobj['description'])) + + for test in self.testobj['tests']: + m_res, nm_res = None, None + if test['type'] not in run_tests: + # skip test + continue + + if test['type'] == 'conversion': + m_res, nm_res = self.runner_conversion(**test) + elif test['type'] == 'roundtrip': + m_res, nm_res = self.runner_roundtrip(**test) + + if nm_res == 0: + logging.info(" {0}... All {1} match.".format(test['type'], m_res)) + else: + logging.info(" {0}... matches: {1} doesn't match: {2}" + "".format(test['type'], m_res, nm_res)) + + matches += m_res + no_matches += nm_res + + return matches, no_matches + + # placeholder function -- TODO How should this be exposed? + def driver_info(self): + return "base class" + + +class TransformTestPyProj(TransformTestBase): + """ + TransformTest uses pyproj to run tests. + """ + def __init__(self, json_dict, kwargs): + # call super class + TransformTestBase.__init__(self, json_dict, kwargs) + + # setup projections + try: + self.proj_left = pyproj.Proj(json_dict['projections'][0], preserve_units=True) + except RuntimeError as e: + logging.error('pyproj raised a RuntimeError for projection string:' + ' "{0}"'.format(json_dict['projections'][0])) + raise RuntimeError(e) + try: + self.proj_right = pyproj.Proj(json_dict['projections'][1], preserve_units=True) + except RuntimeError as e: + logging.error('pyproj raised a RuntimeError for projection string:' + ' "{0}"'.format(json_dict['projections'][1])) + raise RuntimeError(e) + + def transform(self, src_crs, dst_crs, coords): + return self.pyproj_transform_ex(src_crs, dst_crs, coords) + + def driver_info(self): + return 'pyproj {0}\nproj4 {1}\n'.format( + pyproj.__version__, self.proj4_version()) + + # TODO: currently dead code, unneeded for the pyproj repo. version + # as of 2016-05-24. + def proj4_version(): + """ + Gives the proj.4 library's version number. (requires pyproj) + returns string, so proj.4 version 4.9.3 will return "4.9.3" + """ + try: + return pyproj.proj_version_str + except AttributeError: + # for pyproj versions 1.9.5.1 and before, this will run + # Get PROJ4 version in a floating point number + proj4_ver_num = pyproj.Proj(proj='latlong').proj_version + + # convert float into a version string (4.90 becomes '4.9.0') + return '.'.join(str(int(proj4_ver_num * 100))) + + def pyproj_transform_ex(self, proj_src, proj_dst, coords): + """ + wrapper for pyproj.transform to do all the zipping of the coordinates + + returns coordinate list + """ + # are these coordinate triples? + if len(coords[0]) == 3: + xi, yi, zi = lzip(*coords) + xo, yo, zo = pyproj.transform(proj_src, proj_dst, xi, yi, zi) + return lzip(xo, yo, zo) + + # assume list of coordinate pairs + xi, yi = lzip(*coords) + xo, yo = pyproj.transform(proj_src, proj_dst, xi, yi) + return lzip(xo, yo) + + +class TransformTestCs2cs(TransformTestBase): + def __init__(self, json_dict, kwargs): + # call super class + TransformTestBase.__init__(self, json_dict, kwargs) + + # copy proj4 projection strings + self.proj_left, self.proj_right = json_dict['projections'] + + self.exe = kwargs.get('exe', 'cs2cs') + + # when the exe is not the default, check if the file exists + if self.exe == 'cs2cs' or not os.path.isfile(self.exe): + raise RuntimeError('cannot find cs2cs executable file: {}' + ''.format(self.exe)) + + def transform(self, src_crs, dst_crs, coords): + # send points to a temporary file + # TODO Should this use with statement? + tmpfn = NamedTemporaryFile(mode='w+t', delete=False) + for point in coords: + # convert list of float values into a list of strings + point = [str(e) for e in point] + # print('POINT: {}'.format(point)) + tmpfn.write(' '.join(point) + '\n') + + tmpfn.flush() + command = "{exe} {proj_from} +to {proj_to} -f %.13f {filename}".format( + exe=self.exe, proj_from=src_crs, proj_to=dst_crs, filename=tmpfn.name) + tmpfn.close() + + logging.debug('Running Popen on command "{0}"'.format(command)) + + if platform.system() == 'Windows': + shell = False + else: + # shell=True according to the subprocess documentation has some + # security implications + # Linux seems to need this + shell = True + + # call cs2cs + outs = subprocess.check_output(command, shell=shell) + + # delete temporary filename + os.unlink(tmpfn.name) + + # print('RESULTS OUTS: {}\n'.format(outs)) + # print('RESULTS ERRS: {}\n'.format(errs)) + + # outs + # print('RESULTS LINE: {}\n'.format([line.split() for line in outs])) + coords = [] + + # process output + for line in outs.splitlines(): + # print("LINE: {}".format(line)) + coord = [] + for e in line.split(): + coord.append(float(e)) + + coords.append(coord) + + # print('COORDS: {}\n'.format(coords)) + return coords + + def driver_info(self): + shell = True # see transform() for info. + if platform.system() == 'Windows': + shell = False + + outs = subprocess.check_output(self.exe, shell=shell) + return 'PROJ.4 version: ' + outs.splitlines()[0] + '\n' + + +if __name__ == '__main__': + # logging.basicConfig(level=logging.DEBUG) + logging.basicConfig(level=logging.INFO) + + parser = argparse.ArgumentParser(description='Test PROJ.4 using a JSON file.') + parser.add_argument('-e', '--exe', + help="executable with path default: 'cs2cs' (needed for cs2cs driver)") + + parser.add_argument('-d', '--driver', default='pyproj', + help='driver to test') + + parser.add_argument('-t', '--test', + help='only run these test types (valid values: conversion or roundtrip)') + + # get json file names and/or glob patterns + parser.add_argument('testnames_pat_json', nargs=argparse.REMAINDER, + help='single filename or glob wildcard patern') + + args = parser.parse_args() + + # test that the arguments have sensible values + if args.driver not in ('cs2cs', 'pyproj'): + raise ValueError('driver "{}" is not a valid driver'.format(args.driver)) + + logging.info('Python {}'.format(sys.version)) + logging.info('using driver: {}'.format(args.driver)) + + # there could be a version command for the TransformRunner TODO + + match_results, nonmatch_results, success_code = 0, 0, 0 + for test_name in args.testnames_pat_json: + tratst = TransformRunner(test_name, driver=args.driver, exe=args.exe, + test=args.test) + m_res, nm_res, success_cd = tratst.dispatch() + match_results += m_res + nonmatch_results += nm_res + success_code += success_cd + + logging.info("----------------------------------------") + logging.info("TOTAL: matches: {0} non-matching: {1}" + "".format(match_results, nonmatch_results)) + + # exit status code is the number of non-matching results + # This should play nicely with Travis and similar testing. + sys.exit(success_code) diff --git a/proj4/travis/add_deploy_key.sh b/proj4/travis/add_deploy_key.sh new file mode 100755 index 000000000000..6f451aedccb8 --- /dev/null +++ b/proj4/travis/add_deploy_key.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +openssl aes-256-cbc -K $encrypted_38e0a668034a_key -iv $encrypted_38e0a668034a_iv -in travis/projdocs-private.key.enc -out travis/projdocs-private.key -d +cp travis/projdocs-private.key ~/.ssh/id_rsa +chmod 600 ~/.ssh/id_rsa +echo -e "Host *\n\tStrictHostKeyChecking no\n" > ~/.ssh/config + + diff --git a/proj4/travis/before_install.sh b/proj4/travis/before_install.sh new file mode 100755 index 000000000000..8a4bbd2466df --- /dev/null +++ b/proj4/travis/before_install.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +pip install --user cpp-coveralls +./travis/docker.sh + + diff --git a/proj4/travis/build_docs.sh b/proj4/travis/build_docs.sh new file mode 100755 index 000000000000..cc8f5ccd00c1 --- /dev/null +++ b/proj4/travis/build_docs.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cd docs +echo "building docs for $TRAVIS_BUILD_DIR/docs" +docker run -v $TRAVIS_BUILD_DIR:/data -w /data/docs osgeo/proj.4 make html + + diff --git a/proj4/travis/deploy_website.sh b/proj4/travis/deploy_website.sh new file mode 100755 index 000000000000..9a3e6dfce2e7 --- /dev/null +++ b/proj4/travis/deploy_website.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +builddir=$1 +destdir=$2 + + +git clone git@github.com:OSGeo/proj.4.git $destdir/proj4docs +cd $destdir/proj4docs +git checkout gh-pages + + +cd $builddir/html +cp -rf * $destdir/proj4docs + +cd $destdir/proj4docs +git config user.email "proj4bot@proj4.bot" +git config user.name "proj.4 deploybot" + + +git add -A +git commit -m "update with results of commit https://github.com/OSGeo/proj.4/commit/$TRAVIS_COMMIT" +git push origin gh-pages + diff --git a/proj4/travis/docker.sh b/proj4/travis/docker.sh new file mode 100755 index 000000000000..aef7f2d2816b --- /dev/null +++ b/proj4/travis/docker.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# proj.4 image has all of the Sphinx +# dependencies need to build proj.4's docs + +docker pull osgeo/proj.4 + + diff --git a/proj4/travis/projdocs-private.key.enc b/proj4/travis/projdocs-private.key.enc new file mode 100644 index 000000000000..b2aab4385242 Binary files /dev/null and b/proj4/travis/projdocs-private.key.enc differ diff --git a/proj4/wince/msvc80/README.txt b/proj4/wince/msvc80/README.txt new file mode 100644 index 000000000000..46f42ba6e008 --- /dev/null +++ b/proj4/wince/msvc80/README.txt @@ -0,0 +1,77 @@ +------------------------------------------------------------------------------- +PROJ.4 port for Windows CE +Author: Mateusz Loskot (mateusz@loskot.net) +------------------------------------------------------------------------------- + +This readme explains how to build PROJ.4 for Windows CE based +operating systems like Windows Mobile and custom versions. + +----------------------------------- +Building PROJ.4 for Windows CE +----------------------------------- + +Currently, project files for Microsoft Visual C++ 2005 are provided. +Although, PROJ.4 will build using Microsoft eMbedded Visual C++ 3.0 or 4.0 as well. + +1. Requirements + +In order to build PROJ.4 for Windows CE you need to download WCELIBCEX library + +http://sourceforge.net/projects/wcelibcex + +The WCELIBCEX is a library providing helpful features while +porting Windows/Unix libraries to Windows CE and can be downloaded +directly from Subversion repository: + +svn co https://wcelibcex.svn.sourceforge.net/svnroot/wcelibcex/trunk/ wcelibcex + +or as a source distribution package - wcelibcex-1.0.zip - from Download link. + +Next, you will find project file of static library for Visual C+ 2005 +located in wcelibcex/msvc80. + +2. Configure WCELIBCEX + +2.1 Open one of solutions for PROJ.4: projce_dll.sln or projce_lib.sln + in the Visual C++ 2005 IDE. + +2.2 Add WCELIBCEX project to the PORJ.4 solution by selecting wcelibcex_lib.vcproj file. + +2.3 Configure WCELIBCEX_DIR path in projce_common.vsprops Property Sheet: + + 1. Open View -> Property Manager. + 2. Expand one of node under projce_dll or projce_lib project + 3. Double-click on projce_common property sheet + 4. Go to User Macros + 5. Select WCELIBCEX_DIR macro and set path pointing directly to directory + where you downloaded the WCELIBCEX library sources tree. + 6. Click OK and close the dialog box + +3. Build + +Select Build -> Build Solution + +4. Output binaries: + +4.1 projce_lib.sln - static library + +projced.lib - Debug configuration +projce.lib - Release configuration + +4.2 projce_dll.sln - Dynamic-link library + +proj_i.lib - import library +proj.dll - dynamic-link library + +NOTE: There is no 'ced' or 'ce' token in DLL binaries names. + This is intentional and don't change it. + GDAL requires PROJ.4 DLL named as proj.dll. + +----------------------------------- +Notes +----------------------------------- + +Preferable place to ask for help, is the official mailing +list - proj@lists.maptools.org + +Author: Mateusz Loskot diff --git a/proj4/wince/msvc80/projce_common.vsprops b/proj4/wince/msvc80/projce_common.vsprops new file mode 100644 index 000000000000..d90192bbec64 --- /dev/null +++ b/proj4/wince/msvc80/projce_common.vsprops @@ -0,0 +1,15 @@ + + + + + diff --git a/proj4/wince/msvc80/projce_dll/projce_dll.sln b/proj4/wince/msvc80/projce_dll/projce_dll.sln new file mode 100644 index 000000000000..1f005affe6ba --- /dev/null +++ b/proj4/wince/msvc80/projce_dll/projce_dll.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "projce_dll", "projce_dll.vcproj", "{A5AFA635-6DD3-4437-9115-13C9B57138BE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E123D79D-AEC4-4122-8F53-14BCA5E575E7}" + ProjectSection(SolutionItems) = preProject + ..\README.txt = ..\README.txt + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4) + Debug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4) + Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) + Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4) + Release|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4) + Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I) + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {A5AFA635-6DD3-4437-9115-13C9B57138BE}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/proj4/wince/msvc80/projce_dll/projce_dll.vcproj b/proj4/wince/msvc80/projce_dll/projce_dll.vcproj new file mode 100644 index 000000000000..fceb58025cb9 --- /dev/null +++ b/proj4/wince/msvc80/projce_dll/projce_dll.vcproj @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/proj4/wince/msvc80/projce_lib/projce_lib.sln b/proj4/wince/msvc80/projce_lib/projce_lib.sln new file mode 100644 index 000000000000..df9500092224 --- /dev/null +++ b/proj4/wince/msvc80/projce_lib/projce_lib.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "projce_lib", "projce_lib.vcproj", "{E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1619681D-2192-42F6-AF3E-7016F3735D5E}" + ProjectSection(SolutionItems) = preProject + ..\README.txt = ..\README.txt + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4) + Debug|Smartphone 2003 (ARMV4) = Debug|Smartphone 2003 (ARMV4) + Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I) + Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4) + Release|Smartphone 2003 (ARMV4) = Release|Smartphone 2003 (ARMV4) + Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I) = Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I) + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Smartphone 2003 (ARMV4).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Smartphone 2003 (ARMV4).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Build.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I).Deploy.0 = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + {E33BA2AA-25D9-48B1-A9FB-F77EB915AD72}.Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I).ActiveCfg = Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I) + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/proj4/wince/msvc80/projce_lib/projce_lib.vcproj b/proj4/wince/msvc80/projce_lib/projce_lib.vcproj new file mode 100644 index 000000000000..c5c962d7c330 --- /dev/null +++ b/proj4/wince/msvc80/projce_lib/projce_lib.vcproj @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +